Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: Процедурный стиль vs Объектно ориентированное программирование
Покинул форум
Сообщений всего: 16
Дата рег-ции: Янв. 2016
Помог: 0 раз(а)
Хочу обсудить все за и против в вопросе процедурный стиль против объектно ориентированного программирования.
Давайте сделаем конструктивно чтобы тему не закрылы за флейм и не будем делать такие комменты как "Если ты пишешь процедурный код то ты херовый програмист" или "<Какой то> крутой прогер или мой учитель програмирования в универе смеется над таким вопросом" - так доказываются догмы.
Пишите конкретно по пунктам почему процедурный стиль неприемлемен вами или чем ООП лчше процедурного лучше сразу с примером кода.
Лично я утверждаю что вопрос ООП vs Процедурный стиль это дело выбора каждого програмиста, конкретно что один лучше другово в разы нету ни у одного стиля.
Объектный подход к планированию, написанию программы с точки зрения обьектов, что самом по себе ни чем не лучше любово другово подхода.
Этот стиль стал популаярен во многом блогадаря рекламе и насажденю в сми теперь многие програмисты и работодатели (которые вобще не секут в програмировании) думают что это какой-то стандарт и те кто его не используют не профессионалы.
Ели кто то думает что я упал с дуба посмотрите на критику ООП на с википедии.
Было показано отсутствие значимой разницы в продуктивности разработки программного обеспечения между ООП и процедурным подходом[11].
Кристофер Дэйт указывает на невозможность сравнения ООП и других технологий во многом из-за отсутствия строгого и общепризнанного определения ООП[12].
Александр Степанов в одном из своих интервью указывал, что ООП «методологически неправильно» и что «…ООП практически такая же мистификация, как и искусственный интеллект…»[13].
Фредерик Брукс указывает, что наиболее сложной частью создания программного обеспечения является «…спецификация, дизайн и тестирование концептуальных конструкций, а отнюдь не работа по выражению этих концептуальных конструкций…». ООП (наряду с такими технологиями как искусственный интеллект, верификация программ, автоматическое программирование, графическое программирование, экспертные системы и др.), по его мнению, не является «серебряной пулей», которая могла бы на порядок величины снизить сложность разработки программных систем. Согласно Бруксу, «…ООП позволяет сократить только привнесённую сложность в выражение дизайна. Дизайн остаётся сложным по своей природе…»[14].
Эдсгер Дейкстра указывал: «…то, о чём общество в большинстве случаев просит — это змеиное масло. Естественно, „змеиное масло“ имеет очень впечатляющие названия, иначе будет очень трудно что-то продать: „Структурный анализ и Дизайн“, „Программная инженерия“, „Модели зрелости“, „Управляющие информационные системы“ (Management Information Systems), „Интегрированные среды поддержки проектов“, „Объектная ориентированность“, „Реинжиниринг бизнес-процессов“…»[15].
Никлаус Вирт считает, что ООП — не более чем тривиальная надстройка над структурным программированием, и преувеличение её значимости, выражающееся, в том числе, во включении в языки программирования всё новых модных «объектно-ориентированных» средств, вредит качеству разрабатываемого программного обеспечения.
Патрик Киллелиа в своей книге «Тюнинг веб-сервера» писал: «…ООП предоставляет вам множество способов замедлить работу ваших программ…».
Известная обзорная статья проблем современного ООП-программирования перечисляет некоторые типичные проблемы ООП[16][неавторитетный источник? 677 дней].
В программистском фольклоре получила широкое распространение критика объектно-ориентированного подхода в сравнении с функциональным подходом с использованием метафоры «Королевства Существительных» из эссе Стива Йегги[17].
Если попытаться классифицировать критические высказывания в адрес ООП, можно выделить несколько аспектов критики данного подхода к программированию.
Критика рекламы ООП.
Критикуется явно высказываемое или подразумеваемое в работах некоторых пропагандистов ООП, а также в рекламных материалах «объектно-ориентированных» средств разработки представление об объектном программировании как о некоем всемогущем подходе, который магическим образом устраняет сложность программирования. Как замечали многие, в том числе упомянутые выше Брукс и Дейкстра, «серебряной пули не существует» — независимо от того, какой парадигмы программирования придерживается разработчик, создание нетривиальной сложной программной системы всегда сопряжено со значительными затратами интеллектуальных ресурсов и времени. Из наиболее квалифицированных специалистов в области ООП никто, как правило, не отрицает справедливость критики этого типа.
Оспаривание эффективности разработки методами ООП.
Критики оспаривают тезис о том, что разработка объектно-ориентированных программ требует меньше ресурсов или приводит к созданию более качественного ПО. Проводится сравнение затрат на разработку разными методами, на основании которого делается вывод об отсутствии у ООП преимуществ в данном направлении. Учитывая крайнюю сложность объективного сравнения различных разработок, подобные сопоставления, как минимум, спорны. С другой стороны получается что ровно так же спорны и утверждения об эффективности ООП. Производительность объектно-ориентированных программ.
Указывается на то, что целый ряд «врождённых особенностей» ООП-технологии делает построенные на её основе программы технически менее эффективными, по сравнению с аналогичными необъектными программами. Не отрицая действительно имеющихся дополнительных накладных расходов на организацию работы ООП-программ (см. раздел «Производительность» выше), нужно, однако, отметить, что значение снижения производительности часто преувеличивается критиками. В современных условиях, когда технические возможности компьютеров чрезвычайно велики и постоянно растут, для большинства прикладных программ техническая эффективность оказывается менее существенна, чем функциональность, скорость разработки и сопровождаемость. Лишь для некоторого, очень ограниченного класса программ (ПО встроенных систем, драйверы устройств, низкоуровневая часть системного ПО, научное ПО) производительность остаётся критическим фактором. Критика отдельных технологических решений в ООП-языках и библиотеках.
Эта критика многочисленна, но затрагивает она не ООП как таковое, а приемлемость и применимость в конкретных случаях тех или иных реализаций её механизмов. Одним из излюбленных объектов критики является язык C++, входящий в число наиболее распространённых промышленных ООП-языков.
Покинул форум
Сообщений всего: 2493
Дата рег-ции: Нояб. 2011 Откуда: Одесса, Украина
Помог: 131 раз(а)
а ты вообще с какой целью интересуешься?
----- Just do it
DelphinPRO
Отправлено: 25 Января, 2016 - 08:55:35
Активный участник
Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012
Помог: 353 раз(а)
холиварная тема
если вам нужна скорость - пишите на си процедурами.
Если вам нужен поддерживаемый, тестируемый, расширяемый, логичный, стройный и понятный код, ваш выбор - ОПП
Покинул форум
Сообщений всего: 1043
Дата рег-ции: Июль 2014
Помог: 10 раз(а)
Масштаб проекта, вероятно, играет не последнюю роль в выборе стиля.
Если проект большой, с хорошим бюджетом, долгосрочный, задействовано несколько программистов, тогда, наверное, проще ООП.
Для небольших проектов все же лучше процедурный, вероятно.
Но никто не запрещает использовать мультипарадигмальный подход даже на больших проектах, но тут зависит от целевых назначений тех или иных модулей этого крупного проекта.
Это подразумевает то, что что-то должно быть тщательно спроектировано, с расчётом на долгосрочную работу и редкое обновление, а что-то может часто меняться... и тут, конечно, подход разный.
Покинул форум
Сообщений всего: 378
Дата рег-ции: Сент. 2014
Помог: 10 раз(а)
[+]
dcc0 пишет:
И тут вообще еще надо с терминологией разбираться, что есть в действительности процедурное программирование, а что есть императивное.
Что тут разбираться. Процедурное программирование - императивно. ООП - тоже императивно. Автоматное программирование - это вообще область алгоритмов. В общем это совершенно разные категории странно смешанные в кашу.
----- self-banned
Viator
Отправлено: 25 Января, 2016 - 14:58:31
Новичок
Покинул форум
Сообщений всего: 1
Дата рег-ции: Март 2012 Откуда: Lviv, Ukraine
Помог: 0 раз(а)
dcc0 пишет:
что плохого в Википедии?
Когда Википедия стала истиной в последней инстанции? туда что угодно можно написать)
Стосовно ООП и процедурного програмирования.. Все зависит от задач. Небольшой проект проще реализовать процедурно. Все что касается больших проектов - лучше делать в ООП (особенно в свете длительной поддержки и развития)
Покинул форум
Сообщений всего: 1043
Дата рег-ции: Июль 2014
Помог: 10 раз(а)
MiksIr, Википедия разделяет: Основные модели программирования
и Подходы и приёмы.
Так вот, процедурный стиль значится подходах и приёмах, и сюда же попадет даже рекурсия.
И, имхо, оно верно. Хотя рекурсия может быть использована и в программировании автомата, так как, например, php может вполне земещать и совмещать bash/shell - а многие скрипты на bash характеризуются именно автоматным приемам.
Теперь: Основные модели программирования
И сюда уже попадают:
Императивное программирование
Декларативное программирование
Объектно-ориентированное программирование
Последнее содержит еще несколько подклассов.
И тут явно показано, что ООП и императивное программирование разделены.
Теперь еще раз в Вики в статью ООП, в самом начале:
Цитата:
"объектно-ориентированное программирование использует в качестве основных логических конструктивных элементов объекты, а не алгоритмы;"
Имхо, фраза очень не продумана, в ней общее приводится в качестве частного. Тут лучше было бы написать об оперировании на логическом уровне более крупными объектами, как это описано здесь на сайте в учебнике (пример с устройством автомобиля).
Автоматное программирование - это вообще область алгоритмов
Фраза непонятная.
Если почитать в Вики статью парадигма программирования, то получается, что php абсолютно универсален, так как использует почти все модели, подходы и приёмы, а также смешивает все это в одних проектах.
Поэтому говоря о PHP можно говорить только о мультипарадигме. (Добавление)
Viator, а кто говорит про истину? Мы развиваем тему.
Википедия касательно данной темы представляется более надёжным источником, чем БСЭ.
Покинул форум
Сообщений всего: 5025
Дата рег-ции: Нояб. 2012 Откуда: Украина, Львов
Помог: 127 раз(а)
dcc0
Viator пишет:
Когда Википедия стала истиной в последней инстанции? туда что угодно можно написать)
dcc0
Отправлено: 25 Января, 2016 - 15:41:15
Участник
Покинул форум
Сообщений всего: 1043
Дата рег-ции: Июль 2014
Помог: 10 раз(а)
esterio пишет:
Когда Википедия стала истиной в последней инстанции? туда что угодно можно написать)
Википедия - вполне себе нормальный источник, мы ж не статьи о политике и истории обсуждаем.
Собственно вырастает вопрос: тут кто-нибудь вообще понимает до конца принципы классификации ЯП? (Добавление)
Разные источники вообще разное говорят:
Вот тут автору считают, что ООП - это языки не для профессионалов : ) см. первую табличку = )
http://www[dot]urtt[dot]ru/bib/dataindex[dot][dot][dot]html/lect_05[dot]htm (Добавление)
Подчеркну еще раз, что PHP - это мультипарадигма, язык пригодный для широкого спектра задач, а не какая ни каша.
И это очень большой плюс языка в целом, ну а отсутствие компилируемости, т.е. возможность быстрой правки текстов, делает язык просто незаменимым.
Покинул форум
Сообщений всего: 5025
Дата рег-ции: Нояб. 2012 Откуда: Украина, Львов
Помог: 127 раз(а)
Я разделяю людей на два типы теоретики и практики. Так вот за знание ООП больше платят. Простая математика. И вся теория летит в урну когда сталкиваешся з реальними задачами. Потому что заказчику, что начальству глубоко фиолетово как все устроено. Им важен результат.
П.С, я не закликаю писать плохой код. я лиш говорю за то, что если уж нравиться продедурный стиль и вся тима поддерживает тебя в этом, то вперед, но на практике такого нету и в ближайшем будущем наверно не будет. Поетому если хочеш зарабативать, нужно учить ООП ибо код и правда легше поддерживать. (Добавление)
кстати в другой теме caballero лучше меня описал то что я хотел сказать
http://forum.php.su/topic.php?forum=88&topic=26&postid=1453717817#1453717817
Покинул форум
Сообщений всего: 4526
Дата рег-ции: Февр. 2011 Откуда: Москва
Помог: 221 раз(а)
ВеликийПрограмист
ООП, в первую очередь, - образ мышления.
Оно либо приходит с опытом, либо нет.
Соответствующий инструментарий языка, всего лишь, расширяет возможности реализации данной парадигмы.
И "ты" хоть тресни: если не понимаешь, то "тебе" на пальцах хоть заОбъясняйся.
Оно не осязаемо, его чувствовать надо.
А чтобы прочувствовать, начните изучать любой язык со строгой типизацией.
Мне, года 3 назад, помог ActionScript 3.0, после которого я заглянул в Zend FW и прозрел: стало всё таким очевидным
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.