Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Границы применения ООП  (Прочитано 26944 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Olegator
Команда клуба

ru
Offline Offline
Пол: Мужской

« : 24-06-2005 23:30 » 

Из других источников я часто слышу такие высказывания, что:
1. Программы, написанные с помощью ООП медленнее, чем написанные с помощью структурного программирования.
2. Мой друг говорит мне, что ООП предназначен только для интерфейса, а для вычислений можно, но не нужно.

Как я понял, скорость тут зависит от умения программиста. Большинство ругают ООП по незнанию. Поэтому просьба плохо разбирающихся в ООП не вмешиваться в тему.
Особенно мне хочется знать применение ООП для вычислений. Я скоро пойду работать на завод инженером по ракетным двигателям. А там сплошной FORTRAN. Пригодится ли мне там знание ООП и С++?
« Последнее редактирование: 24-06-2005 23:31 от Olegator » Записан
Oldy
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #1 : 25-06-2005 13:38 » 

Цитата
...Пригодится ли мне там знание ООП и С++?
Обязательно. Любое знание крайне полезно.
Записан

С уважением, Oldy.
Olegator
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #2 : 25-06-2005 19:57 » 

Может ссылку кто-нибудь скинет?
Я нашёл одну, но там много воды про противоборство разных языков:
http://algolist.manual.ru/forum/showflat.php/Cat/0/Number/5579/page//fpart/1/vc/1
« Последнее редактирование: 25-06-2005 20:01 от Olegator » Записан
Finch
Спокойный
Администратор

il
Online Online
Пол: Мужской
Пролетал мимо


« Ответ #3 : 25-06-2005 20:15 » 

Olegator, Скажем так, твой вопрос вызывает водопад воды. Слишком он обший. ООП как и другие пути программирования, служит своим целям и задачам. Не только в построении Интерфейса ООП хорош. Но также и в моделировании физического мира. Я так думаю, пакеты разных CAD полностью построены именно на ООП. Так как намного легче ввести  и описать объект в процесс разработки и моделирования. Игрушки также наверно используют ООП. Описание поведения всяких монстриков намного легче производить. Я не призываю всецело применять только ООП. Но там где это само напрашивается, лучше сделать через ООП.

Насчет медленности работы. Это зависит от кривизны ручек и ленивости программиста. Да проги получаются намного больше. Это уже зависит, от того насколько ты используеш наследование. Так как компилятор должен вставить в код программы все функции, всех используемых объектов. И это не зависит, используеш ли ты данную функцию. И как правило, код объектов стараются сделать более универсальным. Потому что хорошим стилем программирования считается, что объект должен быть самодостаточным. Но за универсальность нужно платить.
« Последнее редактирование: 25-06-2005 20:21 от Finch » Записан

Не будите спашяго дракона.
             Джаффар (Коша)
Alf
Гость
« Ответ #4 : 25-06-2005 21:10 » 

Из других источников я часто слышу такие высказывания

Что это за источники? Серьезные аналитики или хакеры-вундеркинды?

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

Ерунда. Применение объектов не влечет существенных накладных расходов. По крайней мере, это касается С++, где программист волен выбирать стиль - объектно-ориентированный или структурный. В других языках, например, C# и Java, сравнить в чистом виде не получится.

2. Мой друг говорит мне, что ООП предназначен только для интерфейса, а для вычислений можно, но не нужно.

Вычисления вычислениям рознь. Если в вычислениях присутствуют, скажем, векторы, матрицы или тензоры, друг может оказаться сильно неправым. А уж если вычисления еще и требуется распараллелить по нескольким компьютерам, то процедурный подход может оказаться чрезмерно сложным.

Как я понял, скорость тут зависит от умения программиста.


В неменьшей степени - от качества компилятора, а также от умения им пользоваться. Производительность одной и той же программы с одним и тем же компилятором может меняться на порядок в зависимости от опций компиляции. Более того, хороший компилятор может даже серьезно оптимизировать вычисления, например, вынося инвариантные подвыражения за цикл, сокращая одинаковые подвыражения в числителе и знаменателе и т.д. Зачастую посредственный программист с хоршим компилятором может добиться лучшего результата, чем хороший с плохим компилятором.

Большинство ругают ООП по незнанию.

Поэтому, слушая советы, всегда следует делать поправку на надежность их источника.

Особенно мне хочется знать применение ООП для вычислений. Я скоро пойду работать на завод инженером по ракетным двигателям. А там сплошной FORTRAN. Пригодится ли мне там знание ООП и С++?

Зависит только от тебя самого. Я работал в нескольких фирмах, и нигде меня не ограничивали в выборе инструментов.

Если ты будешь писать самостоятельные программы, то их пользователям без разницы, на чем они написаны, лишь бы работали корректно. Если придется выполнять часть большого проекта, то опять же непреодолимых трудностей возникнуть не должно, если будешь соблюдать межмодульный интерфейс и соглашения о вызовах. Я вот таким образом даже с любителями FoxPro умудряюсь общий язык находить, а FORTRAN всегда был достаточно вменяемым инструментом по части взаимодействия модулей.

Единственно, на что можно нарваться, - это самодурство руководителей. Если скажут писать на FORTRAN - тогда прощай, ООП. Хотя зависит от версии, которой они придерживаются. Если это будет FORTRAN IV - то тогда распрощайся заодно и со структурным программированием, ибо там все на метках и GOTO построено.
Записан
Olegator
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #5 : 25-06-2005 21:17 » 

Пришёл я на завод. В расчётный отдел.
Надо было сделать спец. часть по диплому. Расчёт математической модели одного из агрегатов двигателя. Принцип работы агрегата мне объяснили и сказали, что осталось составить программу на FORTRANE. Ну я и сказал, что это наверно не долго. Так он рассмеялся и сказал, что тут ошибку ищешь не знамо сколько времени.
Как я понимаю, в данном случае ООП должно помочь?
Наверное количество случаев, когда требуется поиск ошибок и переписывание кода по новой, должно сократиться?
Записан
Finch
Спокойный
Администратор

il
Online Online
Пол: Мужской
Пролетал мимо


« Ответ #6 : 25-06-2005 21:28 » 

Кривизна ручек и продуманность модели будут влиять на количество ошибок. Не зависит от того как ты пишеш. ООП может только сократить тебе работу в описании деталей. Но ты должен четко представлять именно модель этой детали. Если модель ошибочна, лови кучу глюков. Гремлины не дремлют.
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
Alf
Гость
« Ответ #7 : 25-06-2005 21:52 » 

Как я понимаю, в данном случае ООП должно помочь?
Наверное количество случаев, когда требуется поиск ошибок и переписывание кода по новой, должно сократиться?

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

Но кроме них, есть и более мелкие (но не менее вредные) технические ошибки. Их может быть целая уйма - обращение к неинициализированной переменной, непреднамеренное изменение глобальной переменной, путаница в сотнях функций... Вот тут как раз использование объектной парадигмы (инкапсуляция, абстракция, наследование и т.д.) весьма помогает создать качественный код. Изрядная часть таких ошибок выявится еще на этапе компиляции, не доходя даже до отладки, а другая часть достаточно легко локализуется и исправляется в процессе отладки.

Кроме того, не забывай, что исключения сами по себе являются объектами. А программа, написанная без использования механизма обработки исключений, достаточно громоздка - после каждого действия следует явно проверять код ошибки и соответственно реагировать, в результате код обработки ошибочных ситуаций может превысить по объему основной код программы, да и нелегко отследить эту череду условных операторов. Так что решай сам, так ли плохи объекты, как нам их порой преподносят.
Записан
Olegator
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #8 : 25-06-2005 22:09 » 

Alf
Круто. Вот такого ответа я и ждал. Хорошо бы ещё какие-нибудь подобные доводы узнать.

Так что решай сам, так ли плохи объекты, как нам их порой преподносят.
Да чего тут решать. Чем больше я понимаю ООП, тем сильнее в него влюбляюсь.
Записан
Alf
Гость
« Ответ #9 : 25-06-2005 22:16 » 

Alf
Круто. Вот такого ответа я и ждал. Хорошо бы ещё какие-нибудь подобные доводы узнать.

Ну так задавай вопросы, если еще остались.
Записан
Olegator
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #10 : 25-06-2005 23:53 » 

А уж если вычисления еще и требуется распараллелить по нескольким компьютерам, то процедурный подход может оказаться чрезмерно сложным.
Это было бы интересно применить, потому что есть некоторые задачи, которые решаются по 2-3 недели. Хотя конечно задача может в принципе не распараллеливаться.

У меня есть некоторые подозрения насчёт оптимизированности фортрановских программ. Я согласен с тем, что фортрановские программы долго отлаживались, но я думаю, что это касается небольших и часто применяющихся программ. А большие программы всё равно отладить трудно и тут может возникнуть обратный эффект. Особенно, если задачи не распространённые, узко специализированные, программисты бОльше специалисты в физике процессов, а не в программировании.

Далее. Если я всё-таки буду работать на фортране, то наверное от меня потребуется изучение предыдущего кода.
1. Если бы этот код был бы написан с помощью ООП то не проще ли мне было бы это делать?
2. Но всё-таки он написан не с помощью ООП. И тогда как меня тут могут выручить современные технологии в программировании?

Далее. Наверняка программисты довольно сильно продвинулись в программировании математических задач, о которых не знают программисты с завода. Можно ли тут найти средства для качественного рывка. Например класс по обработке больших
 чисел, комплексных чисел.
« Последнее редактирование: 26-06-2005 00:02 от Olegator » Записан
npak
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #11 : 26-06-2005 13:16 » 

Особенно мне хочется знать применение ООП для вычислений. Я скоро пойду работать на завод инженером по ракетным двигателям. А там сплошной FORTRAN. Пригодится ли мне там знание ООП и С++?

Один мой одногруппник некоторое время посвятил диплому по гидродинамике.  По историческим причинам пакет программ для решения задач был на фортране.  В конечном итоге все рассчёты он закодировал на Си++, а в фортране импортировал входные точки своей библиотеки.  Благо в качестве компилятора использовался фортран из GCC, который хорошо интегрирован с Си и Си++.
Записан

UniTesK -- индустриальная технология надежного тестирования.

http://www.unitesk.com/ru/
Alf
Гость
« Ответ #12 : 26-06-2005 19:36 » 

Прежде всего, если вдруг ты до сих пор не читал эту статью, погляди сюда: http://lib.ru/ANEKDOTY/non_pas.txt

Только не забывай, что это - всего лишь шутка, и не воспринимай слишком серьезно.

Это было бы интересно применить, потому что есть некоторые задачи, которые решаются по 2-3 недели. Хотя конечно задача может в принципе не распараллеливаться.

Разумеется, не каждый алгоритм удается распараллелить. Но даже в худшем случае объектный подход тоже может помочь. Дело в том, что состояние объекта несложно сохранить в файле либо в базе данных, а потом при необходимости восстановить. Таким образом, при решении громоздкой задачи ты можешь установить контрольные точки, в которых сохранять состояние нужных объектов, и в случае сбоя начинать вычисления не с нуля, а с последней контрольной точки. Для задачи, которая решается 2-3 недели, такой подход может сохранить уйму времени.

У меня есть некоторые подозрения насчёт оптимизированности фортрановских программ. Я согласен с тем, что фортрановские программы долго отлаживались, но я думаю, что это касается небольших и часто применяющихся программ. А большие программы всё равно отладить трудно и тут может возникнуть обратный эффект. Особенно, если задачи не распространённые, узко специализированные, программисты бОльше специалисты в физике процессов, а не в программировании.

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

Во-вторых, FORTRAN - весьма примитивный язык, чуть выше уровня ассемблера. Поэтому компиляторы дают очень компактный и эффективный код. Конечно, от глупостей при программировании это не спасает, но накладные расходы весьма низки и программы обычно работают очень быстро. Так что тягаться в скорости с программами на FORTRAN непросто.

Далее. Если я всё-таки буду работать на фортране, то наверное от меня потребуется изучение предыдущего кода.
1. Если бы этот код был бы написан с помощью ООП то не проще ли мне было бы это делать?

Без всякого сомнения хорошо написанная ООП-программа понятнее хорошо написанной структурной программы. Однако, как говорится в статье, ссылку на которую я привел выше,
Цитата
закоренелый  настоящий  программист может написать фортрановскую программу на любом языке.
При желании можно написать отвратительную ООП-программу и изящную структурную.

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

2. Но всё-таки он написан не с помощью ООП. И тогда как меня тут могут выручить современные технологии в программировании?

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

Далее. Наверняка программисты довольно сильно продвинулись в программировании математических задач, о которых не знают программисты с завода. Можно ли тут найти средства для качественного рывка. Например класс по обработке больших чисел, комплексных чисел.

Вообще-то по части вычисления формул FORTRAN достаточно хорош, поскольку изначально был под это заточен (даже само название языка означает FORmula TRANslation). Те же комплексные числа встроены в него изначально, за что его до сих пор так любят инженеры. Вот по части нечисленной обработки и изощренной логики дело обстоит куда хуже.
Записан
Alf
Гость
« Ответ #13 : 05-12-2005 21:29 » 

Olegator, извини, пожалуйста, что на твою тему излился этот водопад бессмыслицы, а я его вовремя не пресек. Все лишнее вычистил, перенес в отдельную тему. Можем продолжать разговор по существу.
Записан
Olegator
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #14 : 26-01-2006 05:32 » 

вовсе не обязательно самому писать исключительно на FORTRAN.
Так всё-таки придётся изучать fortran?
Записан
Alf
Гость
« Ответ #15 : 26-01-2006 07:52 » 

Откуда же мне знать детали твоей работы.Может, и придется. А может, вообще только на нем и заставят писать.

Все от тебя самого зависит. Обычно конечного пользователя крайне мало интересует, на чем написан софт, если только ты не библиотеки производишь. Я вот много лет назад, будучи молодым специалистом, попал в контору, где все на FORTRAN'е делалось. И, надо отдать должное, по тем временам весьма неслабые вещи делали. Я же был сторонником Pascal'я. И ничего, никаких конфликтов не было. Кое-кого даже на свою сторону перетянул.

Подходи к делу творчески. Кстати, изучение FORTRAN'а ничего, кроме пользы, не принесет. Когда уткнешься в его ограничения, по-новому посмотришь на современные языки.
« Последнее редактирование: 20-12-2007 16:57 от Алексей1153++ » Записан
Olegator
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #16 : 26-01-2006 12:03 » 

А может, вообще только на нем и заставят писать.
Здесь мне предоставлена полная свобода.

Достаточно аккуратно соблюдать межмодульные интерфейсы
Для этого, что нужно знать, как модули на fortrane писать?
Записан
Alf
Гость
« Ответ #17 : 26-01-2006 12:19 » 

Скорее нужно знать две вещи:

1. Как написать модуль, использующий готовые подпрограммы FORTRAN'а.
2. Как написать модуль, который можно вызывать из программы на FORTRAN'е.

Я когда занимался этими вещами, разобрался настолько, что когда смотрел на подпрограмму FORTRAN'а, сразу видел ее объектный код. Когда хорошо представляешь себе низкоуровневые механизмы передачи параметров в подпрограммы и структуры блоков cOMMON, это становится тривиальным.

Не забудь только, что в FORTRAN'е по определению все параметры передаются по ссылке. Иной раз это приводит к курьезным результатам. Например, я имел дело с реализацией, в которой можно было написать 2 + 2 = 3, и это было правильно. Будь осторожен, FORTRAN - почти ровесник ассемблера и недалеко от него ушел по части безопасности (точнее, опасности) программирования.
« Последнее редактирование: 20-12-2007 17:04 от Алексей1153++ » Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines