Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование в широком смысле слова > Алгоритмика

Алгоритмика Об алгоритмах вообще; методы, обсуждения способов решения

Результаты опроса: ООП - торт?
Ехал класс через класс, видит класс класс, класс класс.... 4 17.39%
Можно, но только очень в меру 15 65.22%
Только процедуры только хардкор 1 4.35%
Дядя Петя, ты дурак? 3 13.04%
Голосовавшие: 23. Вы ещё не голосовали в этом опросе

Ответ
 
Опции темы
Старый 18.07.2012, 08:08   #1
Randomize
[object Object]
 
Аватар для Randomize
 
Регистрация: 01.08.2008
Адрес: В России
Сообщений: 4,355
Написано 2,471 полезных сообщений
(для 6,852 пользователей)
ООП

Прочитал тут простыню на хабре. И даже согласен, а что вы думаете по этому поводу?

Лично меня ну очень утомил труЪ ООП подход, который сейчас в моде - "ООП ради ООП".
Часто чтоб сделать простое действие вижу пяток классов, которые призваны делать одно действие и один раз.
Такое впечатление, что ООП взращивает поколение Чарльзов Дикенсов, а не программистов.
__________________
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 за это полезное сообщение:
ffinder (18.07.2012), Gector (18.07.2012), Harter (18.07.2012)
Старый 18.07.2012, 08:47   #2
Harter
Бывалый
 
Аватар для Harter
 
Регистрация: 03.11.2008
Адрес: Украина, Днепропетровск
Сообщений: 871
Написано 554 полезных сообщений
(для 2,520 пользователей)
Ответ: ООП

МНЕ НРАВИТСЯ ООП ПОДХОД К ПРОГРАММИРОВАНИЮ. Я ПОЛУЧАЮ ЭСТЕТИЧЕСКОЕ УДОВОЛЬСТВИЕ ОТ ГРАМОТНО ОРГАНИЗОВАННОГО ВЗАИМОДЕЙСТВИЯ КЛАССОВ. ВОЗМОЖНО, Я - ЧАРЛЬЗ ДИККЕНС.
(Offline)
 
Ответить с цитированием
Эти 4 пользователя(ей) сказали Спасибо Harter за это полезное сообщение:
ABTOMAT (18.07.2012), Phantom (20.07.2012), Randomize (18.07.2012), Reks888 (18.07.2012)
Старый 18.07.2012, 08:55   #3
Randomize
[object Object]
 
Аватар для Randomize
 
Регистрация: 01.08.2008
Адрес: В России
Сообщений: 4,355
Написано 2,471 полезных сообщений
(для 6,852 пользователей)
Ответ: ООП

Сообщение от 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)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Harter (18.07.2012)
Старый 18.07.2012, 09:47   #4
Harter
Бывалый
 
Аватар для Harter
 
Регистрация: 03.11.2008
Адрес: Украина, Днепропетровск
Сообщений: 871
Написано 554 полезных сообщений
(для 2,520 пользователей)
Ответ: ООП

Сообщение от Randomize Посмотреть сообщение
Есть опыт сравнения с другими подходами? (я не про блиц-стайл)
И да, я тут не гоню на юнити. Там ещё относительно всё в порядке.
Да не особо) Я на объектно-ориентированное как раз после директивного перешел, да еще и почти сразу в Unity, поэтому мне так уютно и хорошо.
Перед тем еще писал на "чистых" плюсах... чуть более утомительно, но все равно особого бугурта не испытывал.

А какие вообще есть годные альтернативы?
(Offline)
 
Ответить с цитированием
Старый 18.07.2012, 12:06   #5
jimon
 
Сообщений: n/a
Ответ: ООП

Нажмите на изображение для увеличения
Название: ae716e3c55eff053fcb24d323cdbf1b6.jpg
Просмотров: 1265
Размер:	87.1 Кб
ID:	17194

раньше пилили всё ООП, но теперь юзаем ООП только как синтаксический сахар (методы и 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 пользователя(ей) сказали Спасибо за это полезное сообщение:
ffinder (18.07.2012), Harter (19.07.2012)
Старый 18.07.2012, 12:54   #6
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений
(для 20,935 пользователей)
Ответ: ООП

У Страуструпа целый раздел посвящён, так сказать, философии программирования (никак не найду время изучить его более досконально).
Эпиграф к нему:
Сообщение от 24 Проектирование и программирование
Стремитесь, чтобы все было просто:
просто, как только возможно, но не проще того.
— А. Эйнштейн
Далее приведу фрагмент про классы:
Сообщение от 24.3.1. Что представляют собой классы
Начинающим обычно бывает трудно выявлять классы, но проблема эта
рассасывается со временем без долговременных последствий. Затем, однако, наступает
фаза, когда классы и классовые иерархии размножаются неконтролируемым
образом. Это, как раз, может вызвать долговременные проблемы, усложнив программу
и затруднив ее понимание и сопровождение. Не нужно каждую мелкую деталь
системы обязательно представлять классом, и не всякую взаимосвязь нужно
отражать в форме наследования классов. Цель проектирования — смоделировать
систему с соответствующим уровнем детализации и на соответствующем уровне
абстракции. Нахождение баланса между простотой и общностью — это не простое
дело.
В обзоре языка там же написано:
Сообщение от 2.8. Заключение
Не существует идеальных языков программирования. К счастью, язык и не
обязан быть идеальным, чтобы быть подходящим инструментом для создания больших
программных систем. На самом деле, язык программирования общего назначения
не может быть идеальным одновременно для всех решаемых с его помощью задач.
То, что идеально для одной задачи, в другой является скорее недостатком, ибо
достижение совершенства предполагает специализацию. Язык C++ разрабатывался
так, чтобы он служил хорошим инструментом для решения широкого круга задач,
и чтобы на нем можно было явно выразить широкий круг идей (идиом
программирования).
Не все можно выразить непосредственно, пользуясь встроенными средствами
языка. Но это и не нужно. Средства языка существуют для поддержки
разнообразных технологий и стилей программирования. Как следствие, в процессе изучения
языка нужно фокусироваться на освоении стилей программирования, для него
родных и естественных, а вовсе не на подробнейшем изучении мельчайших деталей
языковых конструкций.
В практическом программировании мало толку от знания «потайных мест»
языка или от применения максимально возможных средств. Отдельные средства языка
сами по себе не представляют большого интереса. Только во взаимодействии с
другими средствами и в контексте применяемой технологии они приобретают смысл
и интерес. Так что, читая последующие главы, помните, что истинной целью
изучения деталей языка является стремление научиться использовать их так, чтобы
поддерживать выбранный стиль программирования в контексте основательного плана
построения программной системы.
А вообще - принцип Бритвы Оккама рулит (и, кстати, Страуструп тоже его упоминает)
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием
Эти 3 пользователя(ей) сказали Спасибо impersonalis за это полезное сообщение:
Harter (19.07.2012), Randomize (18.07.2012), SBJoker (18.07.2012)
Старый 18.07.2012, 14:11   #7
Randomize
[object Object]
 
Аватар для Randomize
 
Регистрация: 01.08.2008
Адрес: В России
Сообщений: 4,355
Написано 2,471 полезных сообщений
(для 6,852 пользователей)
Ответ: ООП

Сообщение от 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)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Harter (19.07.2012)
Старый 18.07.2012, 14:18   #8
HolyDel
 
Регистрация: 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 за это полезное сообщение:
ABTOMAT (18.07.2012), Harter (19.07.2012), impersonalis (18.07.2012), moka (18.07.2012), Phantom (20.07.2012)
Старый 18.07.2012, 14:35   #9
ABTOMAT
Ференька
 
Аватар для ABTOMAT
 
Регистрация: 26.01.2007
Адрес: улица Пушкина дом Колотушкина
Сообщений: 10,741
Написано 5,461 полезных сообщений
(для 15,675 пользователей)
Ответ: ООП

Что отвечать в опросе, если
Сообщение от Harter Посмотреть сообщение
МНЕ НРАВИТСЯ ООП ПОДХОД К ПРОГРАММИРОВАНИЮ. Я ПОЛУЧАЮ ЭСТЕТИЧЕСКОЕ УДОВОЛЬСТВИЕ ОТ ГРАМОТНО ОРГАНИЗОВАННОГО ВЗАИМОДЕЙСТВИЯ КЛАССОВ. ВОЗМОЖНО, Я - ЧАРЛЬЗ ДИККЕНС.
?

Почему-то первый вариант ответа утверждает, что надо делать из классов всё, даже небо, даже иисуса, второй же - использовать классы в 1.5 местах, не более.
Возможно, автор опроса - Дядя Петя.
(Offline)
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо ABTOMAT за это полезное сообщение:
Harter (19.07.2012), Phantom (20.07.2012)
Старый 18.07.2012, 15:25   #10
moka
.
 
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,863 пользователей)
Ответ: ООП

Автор темы не знаком с таким направлением как Архитектуринг, что есть аналитический подход к задаче как с общей точки зрения так и с деталей базируясь возможностям проектирования на выбранном языке/ках.
Использую OOP, но не задрачиваюсь слишком тупо, т.к. бесит когда уже есть перебор абстрактных классов, и где разработка становиться просто адом.
Также не нравиться когда разработчики API считают что определённый кастинг одной сущности в другую - доступная процедура, когда логически и интуитивно сущности имеют реально не много общего с точки зрения пользователя.

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

Также если разрабатываю что-то, всегда задумываюсь о том, кто будет использовать интерфейс, пользователь (я или кто-то другой) или разработчик интерфейса. Когда разрабатываешь интерфейс, стараюсь не плодить классы, но и не писать сущности отвечающие за несколько операций, лучше инкапсулировать.
А вот пользователь должен видеть простой и удобный интерфейс, который прозрачно сам о себе говорит.
Лучший интерфейс - это когда пользователь знаком с общей концепцией и принципами, и затем используя Intellisense может программировать, практически не обращаясь в документацию.

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

Зла в ООП нету.
Я ежедневно пишу на процедурных, событейных и ООП языках, и ООП люблю.
(Offline)
 
Ответить с цитированием
Эти 4 пользователя(ей) сказали Спасибо moka за это полезное сообщение:
ABTOMAT (18.07.2012), Harter (19.07.2012), HolyDel (18.07.2012), Phantom (20.07.2012)
Старый 18.07.2012, 15:45   #11
HolyDel
 
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений
(для 2,707 пользователей)
Ответ: ООП

Также если разрабатываю что-то, всегда задумываюсь о том, кто будет использовать интерфейс, пользователь (я или кто-то другой) или разработчик интерфейса.
та же фигня, бро!
(Offline)
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо HolyDel за это полезное сообщение:
Harter (19.07.2012), moka (18.07.2012)
Старый 18.07.2012, 15:58   #12
Randomize
[object Object]
 
Аватар для Randomize
 
Регистрация: 01.08.2008
Адрес: В России
Сообщений: 4,355
Написано 2,471 полезных сообщений
(для 6,852 пользователей)
Ответ: ООП

Сообщение от 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
ffinder
Дэвелопер
 
Аватар для ffinder
 
Регистрация: 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
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений
(для 20,935 пользователей)
Ответ: ООП

Сообщение от ffinder Посмотреть сообщение
тема про недостатки ООП, как подхода, так что не будем углубляться в недостатки сиплюсов.
А и действительно! Сделал отдельную тему.
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +4, время: 14:42.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com