![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#51 | ||
Форумчанин
Регистрация: 29.05.2009
Сообщений: 320
|
![]() Цитата:
"Процедурное" - так и называется, потому что все действия выполняются последовательно, процедурно. Например функции не могут быть вложенными сколь угодно (не считая частного случая - рекурсии), и не могут возвращать несколько значений. В чистом функциональном программировании всё есть функции, следовательно все действия возвращают значения и не имееют побочного эффекта - не изменяют своих аргументов. Пример - Haskell. Так что передача по ссылке, как в С это как раз не фун. программирование, хотя таким образом можно передать функцию. Цитата:
Вот есть три интересные ссылки, сравнения языков по всевозможным критериям и собственно сами возможные критерии: http://ru.wikipedia.org/wiki/Сравнен...ограммирования http://www.rsdn.ru/forum/philosophy/1905860.1.aspx http://www.prowiki.org/wiki4d/wiki.cgi?LanguagesVersusD Судя по этим классификациям C++ -> C далеко не лидеры. Но это незаменимые инструменты для СИСТЕМНОГО программирования. В связи с этим интересно - с чем связаны эти различия? В разных языках заложены разные (иногда наоборот похожие) принципы и в итоге имеем разную функциональность. Может "абсолютная абстрактность" именно в этих принципах? Вообще что это такое "абсолютная абстрактность", я бы например сказал, что это уровень, позволяющий в более краткой форме определить более сложный алгоритм. Т.е. чем выше уровень тем короче код. Насчет D, как раз, там после объявления класса не нужно второй раз определять методы класса - только внутри него. |
||
![]() |
![]() |
![]() |
#52 |
Форумчанин
Регистрация: 01.05.2009
Сообщений: 110
|
![]() |
![]() |
![]() |
![]() |
#53 | ||
Форумчанин
Регистрация: 01.05.2009
Сообщений: 110
|
![]() Цитата:
Цитата:
Причём количество перерастает в качество, дублирования кода не допустимы. Я согласен насчёт краткой формы, естественно под этим подразумеваю не количество символов, а количество используемых для построения элементов с поправкой на всю систему. |
||
![]() |
![]() |
![]() |
#54 | |
Форумчанин
Регистрация: 29.05.2009
Сообщений: 320
|
![]() Цитата:
Вот так примерно и сделано в Ruby: есть массив Arr и можно писать Код:
А если вернуться к файлам и сокетам, то ничего не мешат мыслить в том же направлении - использовать класс IO с двумя методами: Код:
|
|
![]() |
![]() |
![]() |
#55 |
Форумчанин
Регистрация: 01.05.2009
Сообщений: 110
|
![]()
Я как бы уже писал выше, надо использовать полиморфизм и стараться руководить кодом через полиморфные интерфейсы (и не важно чем они представлены). Проблема тех же сортировок и прочих функций в том, что их можно использовать с техникой функционального программирования, как и делается в стандартных и расширенных библиотеках C++.
А это значит, что ООП подход не используется. Тоже самое касается и массивов и других элементов. В целом полиморфные интерфейсы хороши тем, что благодаря чистой абстракции и отсутствию данных загоняют методы в чётко определённые понятия, прекращая их размывание по классам. Даже если учесть, что в C++ это будет класс построенный по некоторому принципу, то есть по патерну проектирования называемого интерфейсом. В связи с этим существует интересная концепция UML для отображения проектируемой системы в графическом виде. И естественно стереотипы, которые помогают упорядочить программистам свои мысли, ну и заодно понимать друг друга. |
![]() |
![]() |
![]() |
#56 |
Регистрация: 05.05.2009
Сообщений: 9
|
![]()
Что касается функционального программирования, по моему наиболее важная его характеристика - то что функции не имеют побочного эффекта, и необходимой абстракции (например, подобно const для переменных, чтобы функция могла записывать только в локальные переменные и вызывать только функции, также не имеющие побочного эффекта, а считывать только из своих параметров) в C++ нет. Но с учетом наличия в C++ указателей вообще сомнительно, что там возможна реализация такой абстракции. Т.е. конечно предполагается что функтор сравнения который передается в тот же std::sort ничего там не будет модифицировать, но языком его возможности никак не ограничены =). В Хаскеле это очень удобно тем, что подобные функции легко тестировать и вообще при таких ограничениях труднее сделать ошибку
![]() |
![]() |
![]() |
![]() |
#57 |
Пользователь
Регистрация: 08.11.2009
Сообщений: 16
|
![]()
Совершенной абстракции для удобного программирования не существует, а существует "поиск описания подходящей абстракции и поиск её реализации" под конкретную задачу. Дальше можно не читать - дальше мои мысли из области фантастики. Я много писать не буду, т.к. очень большой разгул для моей фантазии.
На мой взгляд, последующий один из принципов в эволюции железа, компиляторов, ОС-м будет являться "Возможностью формирования классов и их реализации во время выполнения программы" - включает в себя поиск абстракций... Также в ОС-ме не будет понятия программЫ, а будет понятие просто "Операционная система" - одна программа, которая будет и "компилятором и программами" как одно целое. Будут базы знаний ядра, прикладных задач и других данных, которые будут корректироваться ОС-мой в своих нуждах и по командам человека. Команды человека не нужно расписывать на сотни тысяч строк сишного или иного кода, т.к. они будут короткими предложениями по которым человек общается с человеком, по которым будут формироваться данные базы знаний поиска решения. По сути это искусственный интеллект, который не живёт своей железной жизнью, а быстрее чем человек находит описание решения и описание его реализации. Последний раз редактировалось MasterGH; 15.11.2009 в 03:09. |
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
в поисках органайзера | crazy horse | Софт | 6 | 11.02.2008 16:56 |
Нахождение совершенных чисел. Паскаль | NikLik | Помощь студентам | 3 | 23.11.2007 22:19 |