|
Алгоритмика Об алгоритмах вообще; методы, обсуждения способов решения |
Результаты опроса: ООП - торт?
|
Ехал класс через класс, видит класс класс, класс класс....
|
|
4 |
17.39% |
Можно, но только очень в меру
|
|
15 |
65.22% |
Только процедуры только хардкор
|
|
1 |
4.35% |
Дядя Петя, ты дурак?
|
|
3 |
13.04% |
18.07.2012, 08:08
|
#1
|
[object Object]
Регистрация: 01.08.2008
Адрес: В России
Сообщений: 4,358
Написано 2,472 полезных сообщений (для 6,854 пользователей)
|
ООП
Прочитал тут простыню на хабре. И даже согласен, а что вы думаете по этому поводу?
Лично меня ну очень утомил труЪ ООП подход, который сейчас в моде - "ООП ради ООП".
Часто чтоб сделать простое действие вижу пяток классов, которые призваны делать одно действие и один раз.
Такое впечатление, что ООП взращивает поколение Чарльзов Дикенсов, а не программистов.
__________________
Retry, Abort, Ignore? █
Intel Core i7-9700 4.70 Ghz; 64Gb; Nvidia RTX 3070
AMD Ryzen 7 3800X 4.3Ghz; 64Gb; Nvidia 1070Ti
AMD Ryzen 7 1700X 3.4Ghz; 8Gb; AMD RX 570
AMD Athlon II 2.6Ghz; 8Gb; Nvidia GTX 750 Ti
|
(Offline)
|
|
Эти 3 пользователя(ей) сказали Спасибо Randomize за это полезное сообщение:
|
|
18.07.2012, 08:47
|
#2
|
Бывалый
Регистрация: 03.11.2008
Адрес: Украина, Днепропетровск
Сообщений: 871
Написано 554 полезных сообщений (для 2,520 пользователей)
|
Ответ: ООП
МНЕ НРАВИТСЯ ООП ПОДХОД К ПРОГРАММИРОВАНИЮ. Я ПОЛУЧАЮ ЭСТЕТИЧЕСКОЕ УДОВОЛЬСТВИЕ ОТ ГРАМОТНО ОРГАНИЗОВАННОГО ВЗАИМОДЕЙСТВИЯ КЛАССОВ. ВОЗМОЖНО, Я - ЧАРЛЬЗ ДИККЕНС.
|
(Offline)
|
|
Эти 4 пользователя(ей) сказали Спасибо Harter за это полезное сообщение:
|
|
18.07.2012, 08:55
|
#3
|
[object Object]
Регистрация: 01.08.2008
Адрес: В России
Сообщений: 4,358
Написано 2,472 полезных сообщений (для 6,854 пользователей)
|
Ответ: ООП
Сообщение от Harter
МНЕ НРАВИТСЯ ООП ПОДХОД К ПРОГРАММИРОВАНИЮ. Я ПОЛУЧАЮ ЭСТЕТИЧЕСКОЕ УДОВОЛЬСТВИЕ ОТ ГРАМОТНО ОРГАНИЗОВАННОГО ВЗАИМОДЕЙСТВИЯ КЛАССОВ. ВОЗМОЖНО, Я - ЧАРЛЬЗ ДИККЕНС.
|
Есть опыт сравнения с другими подходами? (я не про блиц-стайл)
И да, я тут не гоню на юнити. Там ещё относительно всё в порядке.
__________________
Retry, Abort, Ignore? █
Intel Core i7-9700 4.70 Ghz; 64Gb; Nvidia RTX 3070
AMD Ryzen 7 3800X 4.3Ghz; 64Gb; Nvidia 1070Ti
AMD Ryzen 7 1700X 3.4Ghz; 8Gb; AMD RX 570
AMD Athlon II 2.6Ghz; 8Gb; Nvidia GTX 750 Ti
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
18.07.2012, 09:47
|
#4
|
Бывалый
Регистрация: 03.11.2008
Адрес: Украина, Днепропетровск
Сообщений: 871
Написано 554 полезных сообщений (для 2,520 пользователей)
|
Ответ: ООП
Сообщение от Randomize
Есть опыт сравнения с другими подходами? (я не про блиц-стайл)
И да, я тут не гоню на юнити. Там ещё относительно всё в порядке.
|
Да не особо) Я на объектно-ориентированное как раз после директивного перешел, да еще и почти сразу в Unity, поэтому мне так уютно и хорошо.
Перед тем еще писал на "чистых" плюсах... чуть более утомительно, но все равно особого бугурта не испытывал.
А какие вообще есть годные альтернативы?
|
(Offline)
|
|
18.07.2012, 12:06
|
#5
|
|
Ответ: ООП
раньше пилили всё ООП, но теперь юзаем ООП только как синтаксический сахар (методы и protected-private, нет наследования и виртуальных методов)
из-за отсутствия стандарта на ABI пришлось самому писать указатель на метод (через прокси функцию) и считать что поля располагаются в памяти в таком же порядке как и в коде, плюс выравнивание тоже ручками (помните что в ARM надо чтобы флоаты были на 4 выравнены, а в MIPS чтобы каждый тип выравнен на свой размер - short на 2 байта, int и float - на 4 байта, но мы MIPS не держим ), расковыривать руками vtable оказалось как-то лениво в итоге
ps. и да, никаких ексепшенов, никакого rtti, никакого stl, никаких realloc
ps2. и да, почти всё стараемся писать в map-reduce-by-design стиле, те массив данных и функция которая обрабатывает 1 элемент из него, это очень хорошо ложится на многопоточность в итоге, хотя бы с помощью OpenMP
|
|
|
Эти 2 пользователя(ей) сказали Спасибо за это полезное сообщение:
|
|
18.07.2012, 12:54
|
#6
|
Зануда с интернетом
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений (для 20,935 пользователей)
|
Ответ: ООП
У Страуструпа целый раздел посвящён, так сказать, философии программирования (никак не найду время изучить его более досконально).
Эпиграф к нему:
Сообщение от 24 Проектирование и программирование
Стремитесь, чтобы все было просто:
просто, как только возможно, но не проще того.
— А. Эйнштейн
|
Далее приведу фрагмент про классы:
Сообщение от 24.3.1. Что представляют собой классы
Начинающим обычно бывает трудно выявлять классы, но проблема эта
рассасывается со временем без долговременных последствий. Затем, однако, наступает
фаза, когда классы и классовые иерархии размножаются неконтролируемым
образом. Это, как раз, может вызвать долговременные проблемы, усложнив программу
и затруднив ее понимание и сопровождение. Не нужно каждую мелкую деталь
системы обязательно представлять классом, и не всякую взаимосвязь нужно
отражать в форме наследования классов. Цель проектирования — смоделировать
систему с соответствующим уровнем детализации и на соответствующем уровне
абстракции. Нахождение баланса между простотой и общностью — это не простое
дело.
|
В обзоре языка там же написано:
Сообщение от 2.8. Заключение
Не существует идеальных языков программирования. К счастью, язык и не
обязан быть идеальным, чтобы быть подходящим инструментом для создания больших
программных систем. На самом деле, язык программирования общего назначения
не может быть идеальным одновременно для всех решаемых с его помощью задач.
То, что идеально для одной задачи, в другой является скорее недостатком, ибо
достижение совершенства предполагает специализацию. Язык C++ разрабатывался
так, чтобы он служил хорошим инструментом для решения широкого круга задач,
и чтобы на нем можно было явно выразить широкий круг идей (идиом
программирования).
Не все можно выразить непосредственно, пользуясь встроенными средствами
языка. Но это и не нужно. Средства языка существуют для поддержки
разнообразных технологий и стилей программирования. Как следствие, в процессе изучения
языка нужно фокусироваться на освоении стилей программирования, для него
родных и естественных, а вовсе не на подробнейшем изучении мельчайших деталей
языковых конструкций.
В практическом программировании мало толку от знания «потайных мест»
языка или от применения максимально возможных средств. Отдельные средства языка
сами по себе не представляют большого интереса. Только во взаимодействии с
другими средствами и в контексте применяемой технологии они приобретают смысл
и интерес. Так что, читая последующие главы, помните, что истинной целью
изучения деталей языка является стремление научиться использовать их так, чтобы
поддерживать выбранный стиль программирования в контексте основательного плана
построения программной системы.
|
А вообще - принцип Бритвы Оккама рулит (и, кстати, Страуструп тоже его упоминает)
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
|
(Offline)
|
|
Эти 3 пользователя(ей) сказали Спасибо impersonalis за это полезное сообщение:
|
|
18.07.2012, 14:11
|
#7
|
[object Object]
Регистрация: 01.08.2008
Адрес: В России
Сообщений: 4,358
Написано 2,472 полезных сообщений (для 6,854 пользователей)
|
Ответ: ООП
Сообщение от Harter
А какие вообще есть годные альтернативы?
|
Это в википедии можно посмотреть. Я не агитирую никуда переходить/переползать.
Мне надоели Маяковские да Толстые. Это когда чтоб реализовать простую задачу из разряда:
1) прочитать файл
2) выбрать нужные данные
3) записать выбранные данные куда либо
Пишут 6-8 классов.
Таки да. При этом активно используется наследование и инкапсуляция. Но нужно ли оно?
Мой максимальный лимит вложенности наследования это 3 вложенных наследника. И то я потом сократил до 1 наследника.
По моему сама концепция ООП уж очень утопична. Многим программистам прямо дух захватывает и они стараются написать "божественный" класс на все времена и случаи жизни. Этот класс растёт и цветёт, а потом приобретает себе ещё букет фабрик да менеджеров. По факту получается что текста много - профита мало.
Мне приходится достаточно тесно работать с чужим кодом и я вижу что народ ударился в "графоманию" очень не слабо. Сейчас я имею в виду PHP 5.3, но я думаю в остальных яп есть похожие моменты. Иной раз открыв чужую самописную CMS или иной веб сервис я не понимаю откуда у автора столько времени и сил. Ведь раз я ковыряюсь в его коде он точно простофиля несмотря на весь его ООП фанатизм. Было дело выкинул из одного агрегатора аж 30 файлов с классами. Там были классы а-ля
Class ArraySortHelper_IntKey Extends ArraySortHelper{ public function sort(array $array){ /*. тут типа реализация, но она всего в 5-10 строк .*/ } }
Юзались эти классы 1-2 раза собственно в приложении.
__________________
Retry, Abort, Ignore? █
Intel Core i7-9700 4.70 Ghz; 64Gb; Nvidia RTX 3070
AMD Ryzen 7 3800X 4.3Ghz; 64Gb; Nvidia 1070Ti
AMD Ryzen 7 1700X 3.4Ghz; 8Gb; AMD RX 570
AMD Athlon II 2.6Ghz; 8Gb; Nvidia GTX 750 Ti
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
18.07.2012, 14:18
|
#8
|
☭
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений (для 2,707 пользователей)
|
Ответ: ООП
Мне надоели Маяковские да Толстые. Это когда чтоб реализовать простую задачу из разряда:
1) прочитать файл
2) выбрать нужные данные
3) записать выбранные данные куда либо
Пишут 6-8 классов.
|
тут в чем прикол...
если пользователь либы пишет для этого 5-8 классов, то это пипец.
если автор либы пишет 5-8 классов, то видимо либа умеет читать не только с файла, а еще с памяти, с сети, с зип-архива, и напрямую с мозга пользователя. причем неважно сколько в либе классов, пользователь должен вызвать:
file->open("file.txt");
file->read(somevalue);
file->write(someelsevalue);
file->close();
если пользователь вызывает:
file = FILESYSTEM<LoaclFile>()::getSingeltonPtr()->create("file.txt")->getPointer<Shared>();
file->access<Shared>()->getData(0,0,42,somevalue,42,0,0,FILESYSTEM<LoaclFile>()::getSingeltonPtr()->getDefaultReadFactor());
file->access<Shared>()->getData(0,0,42,somevalue,42,0,0,FILESYSTEM<LoaclFile>()::getSingeltonPtr()->getDefaultWriteFactor());
file->close(FILESYSTEM<LoaclFile>()::getSingeltonPtr()->getFlushOnCloseFactor());
то автор либы конченный чудак.
|
(Offline)
|
|
Эти 5 пользователя(ей) сказали Спасибо HolyDel за это полезное сообщение:
|
|
18.07.2012, 14:35
|
#9
|
Ференька
Регистрация: 26.01.2007
Адрес: улица Пушкина дом Колотушкина
Сообщений: 10,741
Написано 5,461 полезных сообщений (для 15,675 пользователей)
|
Ответ: ООП
Что отвечать в опросе, если
Сообщение от Harter
МНЕ НРАВИТСЯ ООП ПОДХОД К ПРОГРАММИРОВАНИЮ. Я ПОЛУЧАЮ ЭСТЕТИЧЕСКОЕ УДОВОЛЬСТВИЕ ОТ ГРАМОТНО ОРГАНИЗОВАННОГО ВЗАИМОДЕЙСТВИЯ КЛАССОВ. ВОЗМОЖНО, Я - ЧАРЛЬЗ ДИККЕНС.
|
?
Почему-то первый вариант ответа утверждает, что надо делать из классов всё, даже небо, даже иисуса, второй же - использовать классы в 1.5 местах, не более.
Возможно, автор опроса - Дядя Петя.
|
(Offline)
|
|
Эти 2 пользователя(ей) сказали Спасибо ABTOMAT за это полезное сообщение:
|
|
18.07.2012, 15:25
|
#10
|
.
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений (для 6,863 пользователей)
|
Ответ: ООП
Автор темы не знаком с таким направлением как Архитектуринг, что есть аналитический подход к задаче как с общей точки зрения так и с деталей базируясь возможностям проектирования на выбранном языке/ках.
Использую OOP, но не задрачиваюсь слишком тупо, т.к. бесит когда уже есть перебор абстрактных классов, и где разработка становиться просто адом.
Также не нравиться когда разработчики API считают что определённый кастинг одной сущности в другую - доступная процедура, когда логически и интуитивно сущности имеют реально не много общего с точки зрения пользователя.
ООП ради ООП - для опыта и развития способностей в работе с деталями ООП в определённом языке - полезное упражнение, но не рациональное направление в практическом программировании.
Также если разрабатываю что-то, всегда задумываюсь о том, кто будет использовать интерфейс, пользователь (я или кто-то другой) или разработчик интерфейса. Когда разрабатываешь интерфейс, стараюсь не плодить классы, но и не писать сущности отвечающие за несколько операций, лучше инкапсулировать.
А вот пользователь должен видеть простой и удобный интерфейс, который прозрачно сам о себе говорит.
Лучший интерфейс - это когда пользователь знаком с общей концепцией и принципами, и затем используя Intellisense может программировать, практически не обращаясь в документацию.
ООП - это мощная и сложная парадигма мышления, там слишком много свободы для многих, в которой они начинают теряться как в статье автор. Процедурное - не даёт столь большую свободу выбора, и многие кто не способны мыслить как архитектор самостоятельно, не смогут самостоятельно мыслить в ООП парадигме, а будут искать некие правила и нотации.
Зла в ООП нету.
Я ежедневно пишу на процедурных, событейных и ООП языках, и ООП люблю.
|
(Offline)
|
|
Эти 4 пользователя(ей) сказали Спасибо moka за это полезное сообщение:
|
|
18.07.2012, 15:45
|
#11
|
☭
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений (для 2,707 пользователей)
|
Ответ: ООП
Также если разрабатываю что-то, всегда задумываюсь о том, кто будет использовать интерфейс, пользователь (я или кто-то другой) или разработчик интерфейса.
|
та же фигня, бро!
|
(Offline)
|
|
Эти 2 пользователя(ей) сказали Спасибо HolyDel за это полезное сообщение:
|
|
18.07.2012, 15:58
|
#12
|
[object Object]
Регистрация: 01.08.2008
Адрес: В России
Сообщений: 4,358
Написано 2,472 полезных сообщений (для 6,854 пользователей)
|
Ответ: ООП
Сообщение от HolyDel
если пользователь вызывает:
file = FILESYSTEM<LoaclFile>()::getSingeltonPtr()->create("file.txt")->getPointer<Shared>();
file->access<Shared>()->getData(0,0,42,somevalue,42,0,0,FILESYSTEM<LoaclFile>()::getSingeltonPtr()->getDefaultReadFactor());
file->access<Shared>()->getData(0,0,42,somevalue,42,0,0,FILESYSTEM<LoaclFile>()::getSingeltonPtr()->getDefaultWriteFactor());
file->close(FILESYSTEM<LoaclFile>()::getSingeltonPtr()->getFlushOnCloseFactor());
то автор либы конченный чудак.
|
В точку. Именно так оно обычно и выглядит.
__________________
Retry, Abort, Ignore? █
Intel Core i7-9700 4.70 Ghz; 64Gb; Nvidia RTX 3070
AMD Ryzen 7 3800X 4.3Ghz; 64Gb; Nvidia 1070Ti
AMD Ryzen 7 1700X 3.4Ghz; 8Gb; AMD RX 570
AMD Athlon II 2.6Ghz; 8Gb; Nvidia GTX 750 Ti
|
(Offline)
|
|
18.07.2012, 16:23
|
#13
|
Дэвелопер
Регистрация: 10.09.2007
Сообщений: 1,442
Написано 793 полезных сообщений (для 1,460 пользователей)
|
Ответ: ООП
Сообщение от jimon
ps. и да, никаких ексепшенов, никакого rtti, никакого stl, никаких realloc
|
со всем согласен, но realloc-то за что???
Сообщение от jimon
ps2. и да, почти всё стараемся писать в map-reduce-by-design стиле
|
одобряю, малацы!
|
(Offline)
|
|
19.07.2012, 01:23
|
#14
|
Зануда с интернетом
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений (для 20,935 пользователей)
|
Ответ: ООП
Сообщение от ffinder
тема про недостатки ООП, как подхода, так что не будем углубляться в недостатки сиплюсов.
|
А и действительно! Сделал отдельную тему.
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 06:57.
|