Форум программистов, компьютерный форум, киберфорум
Священные войны
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.77/187: Рейтинг темы: голосов - 187, средняя оценка - 4.77
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
14.01.2015, 11:28 41
Author24 — интернет-сервис помощи студентам
Цитата Сообщение от hoggy Посмотреть сообщение
Вот только я таким не страдаю.
Поэтому, мне как то сложно воспринимать лесенку из вложенных друг в друга функций - декларативщиной.
декларативщина:
Вложение не отменяет парадигмы. Посмотрите, как на прологе определяется предок: мать с отцом вложены в родителя, а предок и родитель в предка. От этого пролог стал императивным?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.01.2015, 11:28
Ответы с готовыми решениями:

ООП или функции
Привет форумчанам! Такой вопрос нарисовался, Везде ли стоит применять ООП ? Например сейчас пишу...

ООП или Структурный подход?
Доброго времени суток! Могу ли я использовать процедурный подход программирования в PHP для...

литература и/или статьи по ООП
Предложите литературу или скорее статьи по ООП, но с уклоном в элементарное понимание что это и для...

Гавнокоддинг или учить ООП?
Здравствуйте, дело такое, я пишу все свои скрипты в гавнокоддинге. Дело в том, что у меня все...

926
Эксперт С++
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
14.01.2015, 11:40 42
Цитата Сообщение от nullxdth Посмотреть сообщение
Так а ООП-то причём тут?
Когда мы смотрим на закорючки в исходном коде,
мы воспринимаем текст сквозь призму парадигмы языка.

Когда мы смотрим на закорючки оо-языка,
мы видим "сущности, наделенные свойствами и умениями".

И причем это тут интересно ооп вообще?

Мне вот интересно, а вы вообще вчитываетесь в текст, прежде чем его комментировать?

Цитата Сообщение от nullxdth Посмотреть сообщение
Верно. Макросы Си-препроцессора и не могут этого сделать и не безопасны (ведь они просто с текстом работают и ничего не знают о Си). Но иногда вполне себе применимы, как раз для борьбы с boilerplate-ом не сложным.
Мне не нужно этого объяснять.

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

Причем не тривиальное использование.
Понять во что превратится код можно только поняв устройство макроса.

Цитата Сообщение от nullxdth Посмотреть сообщение
Где здесь? В приведенном коде на CL? Приведен идиоматический вид макроса -- "with" макрос генерирующий unwind-protect. Используй, пожалуйста. Всё автоматически и надёжно. RAII и никакого ООП. Какие-же там проблемы?
Такие же как и в сишке: ядро никогда не узнает о факте вызова вложенной функции, и о том, что она завершилась без дополнительных явных вызовов open/close

Подробности см выше.

Цитата Сообщение от nullxdth Посмотреть сообщение
То есть принципиальной разницы между синтаксисом object.method(a, b, ...) и method(object, a, b, ...) нет; кроме того, второй вариант более общий и гибкий.
И менее выразительный.

Цитата Сообщение от nullxdth Посмотреть сообщение
Такие нет.
Ведь захватить ресурсы это одно
Таки да. По определению понятия: Resource Acquisition Is Initialization
"получение ресурса есть инициализация".

Освобождение ресурса не входит в это определение.


Цитата Сообщение от nullxdth Посмотреть сообщение
Ну вот, если Python действительно знаешь, то должен понимать, что RAII механизмы в языке к ООП отношения не имеют:
На питоне есть автоматические конструкторы.
оо-модель питона принципиально ничем не отличается от приплюснутой.
0
1195 / 588 / 88
Регистрация: 20.09.2012
Сообщений: 1,881
14.01.2015, 11:48 43
Цитата Сообщение от hoggy Посмотреть сообщение
функциональщина: .... шаблоны с++

возвращайтесь когда основы хоть какие нибудь усвоите, а то вас читать даже не смешно. даете собственные определения понятиям, которые всем известны и приняты, и рассказываете при этом про какой то марамз.
0
Эксперт функциональных языков программированияЭксперт Java
4486 / 2721 / 485
Регистрация: 28.04.2012
Сообщений: 8,590
14.01.2015, 12:02 44
Цитата Сообщение от hoggy Посмотреть сообщение
Такие же как и в сишке: ядро никогда не узнает о факте вызова вложенной функции, и о том, что она завершилась без дополнительных явных вызовов open/close
with делает явное неявным, болезный. А впрочем, что я распинаюсь, со стеной разговор продуктивней.

Цитата Сообщение от hoggy Посмотреть сообщение
Освобождение ресурса не входит в это определение.
Без освобождения ресурса RAII не имеет никакого смысла.

Цитата Сообщение от hoggy Посмотреть сообщение
На питоне есть автоматические конструкторы.
И?

Python
1
2
3
4
5
def foo():
    resource = new ResourceOwner("foo")
    print "foo"
 
# упс, а кто же освободит ресурс "foo"? Деструкторов-то нет, RAII накрылось медным тазом.
0
Эксперт С++
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
14.01.2015, 12:06 45
Цитата Сообщение от korvin_ Посмотреть сообщение
О, вот это вброс. Ты не смог «распарсить» λ-исчисление, но имеешь что-то сказать про ФП? Как обычно, пруфов не будет, и Солнце продолжает вращаться вокруг Земли?
Пруфы вы можете подсмотреть на хэтхантаре в разделе "ванкансии".

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

Цитата Сообщение от korvin_ Посмотреть сообщение
Захват ресурсов — один из множества способов использовать объекты, которым они не ограничиваются. А не можешь представить, возьми любой другой язык и посмотри.
Я не могу себе представить "объект", который не умеет захватывать ресурсы.
Потому что такой объект не может хранить состояние.
А значит не может быть механизмом.
Не может быть "сущностью, наделенной свойствами и умениями".

В любом случае такое ооп - какое то жалкое подобие,
и мне это вряд ли будет интересно.

Цитата Сообщение от korvin_ Посмотреть сообщение
Последняя попытка.
Это не последняя, а именно что первая и единственная на данный момент, которая успешна.
Именно это я просил вас показать с самого начала.

Долго же пришлось вас окучивать.

Теперь я вижу, что такое "динамическая перегрузка".

Цитата Сообщение от korvin_ Посмотреть сообщение
Серьёзно? То-то ни в Си, ни в Паскале её нет.
Ну и что?

Цитата Сообщение от korvin_ Посмотреть сообщение
Стандартные правила Си.
В стандарте языка си вообще не сказано,
что программист обязан пользоваться макросами.


Цитата Сообщение от korvin_ Посмотреть сообщение
Пока что все пользуются.
Все - это кто?

Цитата Сообщение от korvin_ Посмотреть сообщение
Лол, а как тогда называется вот это: ((char*)&foo)[6] = 'a'; ? Уж не приведением ли типа foo* к типу char*?
Это - приведение. Ну и что? При чем тут вообще приведение?
Возьмите какой нибудь язык, где в принципе не доступно ни приведение типов, ни прямой доступ к памяти
Что с того?

С точки зрения "низкого уровня" объекты на таком языке кусками памяти быть не перестали.

Цитата Сообщение от korvin_ Посмотреть сообщение
Пока что ты говоришь как человек, который не знает ничего, кроме чуть-чуть C++, и из-за отсутствия знаний не способный понять элементарных вещей, которых ему говорят.
Ню ню.
0
Эксперт функциональных языков программированияЭксперт Java
4486 / 2721 / 485
Регистрация: 28.04.2012
Сообщений: 8,590
14.01.2015, 12:07 46
Цитата Сообщение от hoggy Посмотреть сообщение
И менее выразительный.
Ну вырази-ка мне своим выразительным x.method(y), такой, что выбор реализации осуществляется, не только по объекту x, но и по объекту y.

Или капитан выразительность покажет, как применить метод x.method(y, z) частично только к аргументам x и y, создав замыкание?
0
Эксперт С++
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
14.01.2015, 12:12 47
Цитата Сообщение от taras atavin Посмотреть сообщение
c++ не поддерживает функциональную парадигму.
Судя по вашим темам в разделе "новичков с++", я уже понял, что вы не умеете шаблона с++.

Добавлено через 1 минуту
Цитата Сообщение от pycture Посмотреть сообщение
возвращайтесь когда основы хоть какие нибудь усвоите, а то вас читать даже не смешно. даете собственные определения понятиям, которые всем известны и приняты, и рассказываете при этом про какой то марамз.
Не уверен, что вы сможете рассказать мне что нибудь о с++ такого, чего бы я сам не смог бы разжевать и вам в рот положить.

Добавлено через 1 минуту
Цитата Сообщение от korvin_ Посмотреть сообщение
Без освобождения ресурса RAII не имеет никакого смысла.
По этой причине мне не нравятся языки с мусоровозкой.

Но это дело привычки. Главное, что бы объекты умели захватывать ресурс.

Добавлено через 1 минуту
Цитата Сообщение от korvin_ Посмотреть сообщение
И?
И значит там есть RAII.
Зачем вы мне показываете случай, когда оно не используется?
0
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
14.01.2015, 12:15 48
В шаблонах я дейставительно новичок. Но это не означает, что с помощью шаблонов можно на c++ декларировать прогу как последовательность вычисления функций в математическом понимании термина "функция". На c++ вообще то принято значение этого термина из процедурного программирования: функция есть подпрограмма, возвращающая значение через собственное имя (то есть в выражении, например,
C++
1
x=f(...);
возвращаемое значение обозначено именем самой функции). В противоположность процедурам, которые есть такие подпрограммы, которым синтаксически запрещён такой возврат значений и оставлено лишь два способа возврата значений: через изменяемый параметр и через внешнюю (глобальную) переменную.
0
Эксперт С++
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
14.01.2015, 12:17 49
Цитата Сообщение от korvin_ Посмотреть сообщение
Ну вырази-ка мне своим выразительным x.method(y), такой, что выбор реализации осуществляется, не только по объекту x, но и по объекту y.
http://en.wikipedia.org/wiki/Multiple_dispatch

Может быть я не до конца понял о чем вы спрашиваете,
но там в разделе python есть неплохой пример использования.

Добавлено через 16 секунд
Цитата Сообщение от taras atavin Посмотреть сообщение
В шаблонах я дейставительно новичок. Но это не означает, что с помощью шаблонов можно на c++ декларировать прогу как последовательность вычисления функций в математическом понимании термина "функция".
Можно.
Синтаксис корявый. Суть - одна.
0
Эксперт функциональных языков программированияЭксперт Java
4486 / 2721 / 485
Регистрация: 28.04.2012
Сообщений: 8,590
14.01.2015, 12:17 50
Цитата Сообщение от hoggy Посмотреть сообщение
Я не могу себе представить "объект", который не умеет захватывать ресурсы.
Ну так оглянись вокруг: Point { x : Real, y : Real }

Цитата Сообщение от hoggy Посмотреть сообщение
Потому что такой объект не может хранить состояние.
ОМГ? Расскажи, какой ресурс захватывает объект точка, указанный выше?

Цитата Сообщение от hoggy Посмотреть сообщение
В любом случае такое ооп - какое то жалкое подобие,
Алан Кей смотрит на тебя, как на школьника.

Цитата Сообщение от hoggy Посмотреть сообщение
Это не последняя, а именно что первая и единственная на данный момент, которая успешна.
Именно это я просил вас показать с самого начала.
Долго же пришлось вас окучивать.


Цитата Сообщение от hoggy Посмотреть сообщение
Ну и что?
Как что? Прояви уже хоть какие-то признаки интеллекта. Твои слова: «перегрузка пришла из процедурной парадигмы». В процедурных языках (Си, Паскаль) её нет. Так откуда она пришла?

Цитата Сообщение от hoggy Посмотреть сообщение
В стандарте языка си вообще не сказано,
что программист обязан пользоваться макросами.
Более того, там даже не сказано, что программист обязан пользоваться Си.

Цитата Сообщение от hoggy Посмотреть сообщение
Это - приведение. Ну и что? При чем тут вообще приведение?
При том, что C++ позволяет легко любой якобы объект превратить в кусок памяти. Прям как в Си.

Цитата Сообщение от hoggy Посмотреть сообщение
Возьмите какой нибудь язык, где в принципе не доступно ни приведение типов, ни прямой доступ к памяти
И это будет не C++. Так что C++ — это тот же Си, только с кучей костылей для псевдо-ООП, ничем не лучше Gobject.

Цитата Сообщение от hoggy Посмотреть сообщение
С точки зрения "низкого уровня" объекты на таком языке кусками памяти быть не перестали.
Только доступа к этому низкому уровню из языка у программиста нет, поэтому для него они остаются объектами.

Цитата Сообщение от hoggy Посмотреть сообщение
Ню ню.
Угу-угу.
0
Эксперт С++
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
14.01.2015, 12:20 51
Цитата Сообщение от taras atavin Посмотреть сообщение
В шаблонах я дейставительно новичок. Но это не означает, что с помощью шаблонов можно на c++ декларировать прогу как последовательность вычисления функций в математическом понимании термина "функция".
Можно.
Синтаксис корявый, но суть одна.
0
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
14.01.2015, 12:26 52
Покажи.
0
Эксперт С++
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
14.01.2015, 12:27 53
Цитата Сообщение от korvin_ Посмотреть сообщение
Ну так оглянись вокруг: Point { x : Real, y : Real }
это структура.

При желании можно воспринимать, как "сущность наделенную свойствами, но ничего не умеющая".
Этакий частный случай ооп.

Но если язык не предоставляет возможность создавать "сущности наделенные свойствами и умениями", то такая конструкция на языке скорее будет восприниматься, как сишная структура и не более того.

Цитата Сообщение от korvin_ Посмотреть сообщение
ОМГ? Расскажи, какой ресурс захватывает объект точка, указанный выше?
см выше.

Цитата Сообщение от korvin_ Посмотреть сообщение
Алан Кей смотрит на тебя, как на школьника.
Скучно.
Цитата Сообщение от korvin_ Посмотреть сообщение
Как что? Прояви уже хоть какие-то признаки интеллекта. Твои слова: «перегрузка пришла из процедурной парадигмы». В процедурных языках (Си, Паскаль) её нет. Так откуда она пришла?
1. А что, обязательно должна была придти из этих языков что ли?
2. По вашему, технология не возможно на процедурном языке?

3. Перегрузка функций в принципе не может быть продуктом никакой иной парадигмы кроме процедурной.

Угадайте парадигму:
Код
foo(type1)
foo(type2)
Проявите признаки интеллекта.
Попробуйте привести пример перегрузки функций, который не являл бы собой процедурную парадигму:
0
Эксперт функциональных языков программированияЭксперт Java
4486 / 2721 / 485
Регистрация: 28.04.2012
Сообщений: 8,590
14.01.2015, 12:29 54
Цитата Сообщение от hoggy Посмотреть сообщение
но там в разделе python есть неплохой пример использования.
А какже этот твой мегавыразительныйй C++ и RAII? Идёт лесом?

Цитата Сообщение от hoggy Посмотреть сообщение
Главное, что бы объекты умели захватывать ресурс.
Лол. ОК.

C
1
2
3
4
5
void foo()
{
    Logger* l = newLogger();
    log(l, "foo");
}
О б-же! Я захватил ресурс в процедурном Си! Ну теперь его точно можно признать ООП.

Цитата Сообщение от hoggy Посмотреть сообщение
Зачем вы мне показываете случай, когда оно не используется?
О, может ты покажешь пример использования RAII в Питоне?
0
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
14.01.2015, 12:33 55
Цитата Сообщение от hoggy Посмотреть сообщение
Угадайте парадигму:
Код Code
1
2
foo(type1)
foo(type2)
Имеется последовательность вызовов двух подпрограмм, при этом возвращаемые значения не фигурируют, значит это процедуры, либо заменяющие их void-функции. Процедурная. Шаблон же отвечает лишь за автоматическую перегрузку и в исходник тела функции не лезет в принципе, соответственно тело пишется в той же парадигме, которая была до шаблонов. А вот если
Код
foo(foo(x))
, то уже так просто не угадаешь, надо смотреть тело функции, если там написано не что вычислить, а как, то парадигма императивная и с учётом факта наличия функций процедурная.
0
Эксперт С++
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
14.01.2015, 12:33 56
Цитата Сообщение от korvin_ Посмотреть сообщение
При том, что C++ позволяет легко любой якобы объект превратить в кусок памяти. Прям как в Си.
Никто никого ни во что не превращает.

Я уже писал выше: с++ - мультипарадигма.
Можно смотреть на вещи, как сквозь призму "низкого уровня", так и сквозь "высокого".

С точки зрения низкого уровня - все объекты, это куски памяти.
С точки зрения высокого - оопнутые сущности.

Добавлено через 2 минуты
Цитата Сообщение от korvin_ Посмотреть сообщение
Только доступа к этому низкому уровню из языка у программиста нет, поэтому для него они остаются объектами.
Неужели лед тронулся?

Да, для пользователя.

Но не для сишника, который разрабатывает компилятор этого языка.

Все дело в точки зрения на вещи, понимаете?
Взгляд на вещи, способ абстрагирования - это и называется "парадигмой".
0
Эксперт С++
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
14.01.2015, 12:37 57
Цитата Сообщение от taras atavin Посмотреть сообщение
Покажи.
Обычно, новичкам в плюсах шаблоны кажутся сложными,
потому что язык они изучают начиная с процедурной/ооп.

Шаблоны на самом очень просты.
Нужно лишь изменить точку зрения.
Посмотреть на них сквозь призму функциональной парадигмы.

Сделайте это, и тогда стандартная библиотека не будет казаться вам "о боже, шо за на.."

http://habrahabr.ru/post/118429/
0
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
14.01.2015, 12:39 58
Цитата Сообщение от hoggy Посмотреть сообщение
Я уже писал выше: с++ - мультипарадигма.
Нет. c++ - процедурный язык с поддержкой ООП. Отказ от процедурной парадигмы на нём не возможен уже по самому правилу о том, что точкой входа является подпрограмма main, а от ООП возможен.
0
Эксперт С++
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
14.01.2015, 12:40 59
Цитата Сообщение от korvin_ Посмотреть сообщение
А какже этот твой мегавыразительныйй C++ и RAII? Идёт лесом?
Как был мегавыразительным, так им и остался.

Цитата Сообщение от korvin_ Посмотреть сообщение
О б-же! Я захватил ресурс в процедурном Си! Ну теперь его точно можно признать ООП.
Покажете ярко выраженную сущность наделенную свойствами и умениями.
0
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
14.01.2015, 12:40 60
Цитата Сообщение от hoggy Посмотреть сообщение
Обычно, новичкам в плюсах шаблоны кажутся сложными,
потому что язык они изучают начиная с процедурной/ооп.
Шаблоны на самом очень просты.
Нужно лишь изменить точку зрения.
Слив защитан. И в плюсах вообще я не новичок.
0
14.01.2015, 12:40
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.01.2015, 12:40
Помогаю со студенческими работами здесь

прога или игра ооп
Здравствуйте)Помогите пожалуйста)Нужно в ближайшее время сдать курсовую работу.Требуется сдать...

Mysqli ООП или процедурный подход
Вот интересно, услышать мнение специалистов, что лучшие использовать при работе с mysqli ООП или...

Определить, программа с ооп или нет
Здравствуйте)Помогите пожалуйста разобраться с программой)Мне нужно сдать курсовую по...

Изучаю ООП можно или нет так?
Это index: <?php include('classes/database.class.php'); $object = new DB; $nick = "Alex";...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
60
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru