С Новым годом! Форум программистов, компьютерный форум, киберфорум
ООП и паттерны
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.77/13: Рейтинг темы: голосов - 13, средняя оценка - 4.77
4949 / 2289 / 287
Регистрация: 01.03.2013
Сообщений: 5,989
Записей в блоге: 32

Ищу ментора(ов) по ООП (проектированию архитектуры и реализации)

14.01.2017, 04:02. Показов 2767. Ответов 36
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Ни разу не занимался подобным, опыта нет, но хочу его получить. Создал такую тему Помощь в рефакторинге кода здесь и еще на паре форумов - везде скромное молчание, единственный дельный совет дали на ЛОРе - ссылку на книгу банды четырех и совет начать с проектирования АПИ. Книгу уже читаю, пытаюсь осознать, но мешает отсутствие общих представлений типа чем абстрактные классы отличаются от интерфейсов и т.п. Уже думаю начать не с рефакторинга существующего проекта, а с набора упражнений типа создания модульного приложения с разными ГУЯми - консольным, на Swing или другой графической библиотеке, вэб и т.п. и общим универсальным бэкендом (хоть дублирующим запрос в качестве ответа) через декоратор/мост/фасад или как это там называется. Свои мысли по поводу структуры и архитектуры появляются, но они эволюционируют с течением времени, и не знаю на чем остановиться.

В общем, ищу опытного наставника(ов). Может отсутствие реакции на мои предыдущие сообщения вызвано тем, что мой вопрос был направлен абстрактно в воздух, а надо обращаться конкретно и персонально (типа отнаследоваться от абстрактного базового класса )? Shamil1, что скажете?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
14.01.2017, 04:02
Ответы с готовыми решениями:

Ищу ментора
Здравствуйте. Я только начал изучать программирование и ещё ничего не знаю. Кто согласен мне помочь и немного научить основам? Буду очень...

Ищу ментора по С++!
Здравствуйте! Я ищу человека, который помогал бы мне изучать С++, отвечая на мои вопросы и давая мне разные задачки для практики. Мне очень...

Ищу Ментора
Ищу ментора( Наставника) для начала изучения программирования. Просто пообщаться некоторое время в не форума для ответов на вопросы...

36
Заблокирован
17.01.2017, 11:03
Студворк — интернет-сервис помощи студентам
Shamil1,
Вы пытаетесь экстраполировать мантры быдло-ООП на всю концепцию, тем самым дискредетируя идею. То что Вы говорите, вообще противоречит идее полиморфизма. Точно также можно сказать, что кнопка не должна знать, как ей отрисоваться, а между тем, именно потому что она это знает сама, мы абстрагированны от конкретной отрисовки, мы можем сказать просто "кнопка отрисуйся", а кнопка сама знает как ей отрисоваться. Это позволяет абстрагироваться от того, какой конкретно кнопке мы отсылаем сообщение "Draw". Ваши мантры противоречат самой сути ООП

Строго говоря, кнопка не знает сама, но знает, к ому обратиться, чтобы ее отрисовали

Добавлено через 27 минут
Shamil1,

Вот, кстати, наткнулся на цитату, которая как раз очень релевантна тому, что тут обсуждается, в частности, Вашей неверной трактовки абстрагирования в контексте ООП. Источник, к сожалению сдох, но вот ссылка на цитату из источника:

http://www.dekorte.com/blog_archive/index.html
In all other languages we've considered [Fortran, Algol60, Lisp, APL, Cobol, Pascal], a program consists of passive data-objects on the one hand and the executable program that manipulates these passive objects on the other. Object-oriented programs replace this bipartite structure with a homogeneous one: they consist of a set of data systems, each of which is capable of operating on itself.
0
Модератор
Эксперт функциональных языков программирования
3133 / 2280 / 469
Регистрация: 26.03.2015
Сообщений: 8,876
17.01.2017, 11:13
Цитата Сообщение от asmquest Посмотреть сообщение
Вы пытаетесь экстраполировать мантры быдло-ООП на всю концепцию, тем самым дискредетируя идею.
Я ничего не пытаюсь экстраполировать. Я привёл определение уровней абстракции и на Вашем примере с животными пояснил, что это такое.

Цитата Сообщение от asmquest Посмотреть сообщение
То что Вы говорите, вообще противоречит идее полиморфизма.
В коде мы вызываем метод Save() абстрактного класса AnimalSaver. Во время исполнения у нас вызывается метод класса HamsterSaver. Что тут противоречит? Классический пример полиморфизма.

Цитата Сообщение от asmquest Посмотреть сообщение
Точно также можно сказать, что кнопка не должна знать, как ей отрисоваться, а между тем, именно потому что она это знает сама, мы абстрагированны от конкретной отрисовки, мы можем сказать просто "кнопка отрисуйся", а кнопка сама знает как ей отрисоваться.
Этот подход ("умная запись") оправдывает себя только в некоторых случаях (например, для GUI). В подавляющем большинстве случаев этот подход не оправдан. Никому не нужна Накладная, которая умеет сохранять себя в любое хранилище (SQL DB, xml file, in-memory DB,...) и отрисовывать себя в любом интерфейсе (web page, widows, linux,...).

Добавлено через 3 минуты
Цитата Сообщение от asmquest Посмотреть сообщение
Строго говоря, кнопка не знает сама, но знает, к ому обратиться, чтобы ее отрисовали
Поменяли своё мнение?
Это ведь как раз про мой пример: Animal не знает, как себя сохранить, но он знает, к кому обратиться (AnimalSaver), чтобы его сохранили.
0
Заблокирован
17.01.2017, 11:22
Цитата Сообщение от Shamil1 Посмотреть сообщение
Поменяли своё мнение?
Это ведь как раз про мой пример: Animal не знает, как себя сохранить, но он знает, к кому обратиться (AnimalSaver), чтобы его сохранили.
Нет не поменял. Вы просто судите по псевдооп-языкам и дурному чтиву, поэтому Вы не понимаете сути. Синтаксис object.saveTo(database) следует трактовать: посылаем сообщение к object, и мне плевать, как он будет себя сохранять, с моей точки зрения, с тз отправителя сообщения, абсолютно похрену на это, я вижу только его интерфейс. А вот сам object может делегировать операцию своего сохранения кому угодно. Но это никого не волнует из-вне, для них он просто сохраняет себя.
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
17.01.2017, 12:09
Цитата Сообщение от Shamil1 Посмотреть сообщение
Например, у нас есть абстрактный (базовый) класс Animal.
Животным не нужно знать, как они сохраняются. Поэтому для их сохранения добавляем уровень абстракции, отвечающий за сохранение AnimalSaver с методами Validate() и Save() .
Чтобы не дублировать этот код Validate(), если вдруг мы захотим сохранять в другое место, добавляем уровень абстракции AnimalSaverToPersistentStore с методом Save(). Наша текущая реализация сохраняет в БД. Внутри Save() вызываются Update() или Insert().
Чтобы не дублировать код Save(), если вдруг мы захотим сохранять в другую БД, добавляем уровень абстракции AnimalSaverToSQL с методами Update() и Insert().
Итого у нас 4 уровня абстракции. И когда мы будем добавлять класс Hamster, нам придётся так же добавить конкретные классы HamsterSaver, HamsterSaverToPersistentStore, HamsterSaverToSQL.
напоминает ооп головного мозга
1
1967 / 823 / 114
Регистрация: 01.10.2012
Сообщений: 4,813
Записей в блоге: 2
17.01.2017, 12:22
Цитата Сообщение от asmquest Посмотреть сообщение
Нет не поменял. Вы просто судите по псевдооп-языкам и дурному чтиву, поэтому Вы не понимаете сути. Синтаксис object.saveTo(database) следует трактовать: посылаем сообщение к object, и мне плевать, как он будет себя сохранять, с моей точки зрения, с тз отправителя сообщения, абсолютно похрену на это, я вижу только его интерфейс. А вот сам object может делегировать операцию своего сохранения кому угодно. Но это никого не волнует из-вне, для них он просто сохраняет себя.
Ну к чему это "не понимаете", "плевать", "похрену"? Холиварить тоже можно спокойно и корректно

Что касается данного примера, то он, пожалуй, один из самых избитых. И довольно единодушно признается что object.saveTo(dataBase) - явно плохо. Часто говорят типа "объект НЕ должен знать как себя сохранять". Вы создали "сладкую жизнь" для небольшого фрагмента кода (где зовете object.saveTo) но очень дорогой ценой - теперь object должен знать все подробности dataBase. Если теперь потребуется напр xml (вместо dataBase) - опять то же самое. Выходит классический пример плохой архитектуры "все про всех знают"
1
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
17.01.2017, 12:39
Цитата Сообщение от Igor3D Посмотреть сообщение
И довольно единодушно признается что object.saveTo(dataBase) - явно плохо.
ну не правда.
напротив, как раз таки именно сам объект лучше всех знает собственное устройство,
и знает как себя сериализовывать
здесь если и можно придраться, то только к имени метода.

Цитата Сообщение от Igor3D Посмотреть сообщение
теперь object должен знать все подробности dataBase.
зачем? какое ему вообще дело до особенностей какой то там dataBase?
Цитата Сообщение от Igor3D Посмотреть сообщение
Если теперь потребуется напр xml (вместо dataBase) - опять то же самое.
да ничего не потребуется. будет как то так:

C++
1
2
object >> dataBase;
object >> xml;
при этом объект ничего не знает ни про xml, ни про dataBase.

в худшем случае (на языках, которые не умеют метапрограммирование)
всё что он знает - что есть некий интерфейс,
через который он может передавать свои данные.

а кому они там понадобились,
и что с этими данными будет дальше - его не парит.
0
1967 / 823 / 114
Регистрация: 01.10.2012
Сообщений: 4,813
Записей в блоге: 2
17.01.2017, 13:19
Цитата Сообщение от hoggy Посмотреть сообщение
да ничего не потребуется. будет как то так:
C++
1
2
object >> dataBase;
object >> xml
;
Совершенно верно. И при этом оператор >> объявлен извне и имеет доступ ко всем полям класса object. Т.е. содержательную часть сохранения реализует НЕ object и НЕ dataBase, а "третье лицо" - оператор слива >>. Что, кстати, с полным правом можно рассматривать как несостоятельность концепций ООП и возврат к процедурному программированию.

Цитата Сообщение от hoggy Посмотреть сообщение
напротив, как раз таки именно сам объект лучше всех знает собственное устройство,
и знает как себя сериализовывать
А вот на деле выходит не так, см выше

Цитата Сообщение от hoggy Посмотреть сообщение
..его не парит
В который раз уже "радость начинающего" которому удалось что-то "круто" записать одной строчкой Думаю это и так всем понятно
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
17.01.2017, 13:36
Цитата Сообщение от Igor3D Посмотреть сообщение
И при этом оператор >> объявлен извне и имеет доступ ко всем полям класса object. Т.е. содержательную часть сохранения реализует НЕ object и НЕ dataBase, а "третье лицо" - оператор слива >>.
вообще то >> - это оператор object

ну если вам так будет понятнее:
object.serialize(dataBase);
object.serialize(xml);

нет никакого "третьего лица".
и оно нафиг не нужно.

вообще, откуда такая манера плодить сущности без необходимости?

object сам знает все свои поля,
и как себя правильно сериализовывать.

нафига заводить ещё кого-то третьего,
кто будет знать про него то, что он итак о себе знает?

Цитата Сообщение от Igor3D Посмотреть сообщение
А вот на деле выходит не так, см выше
я смотрю в сторону boost.serialization/cereal
практически идеальный дизайн,
который на сегодняшний день пожалуй что стандарт де факто
в мире с++.

то, что предлагает вы - это какое то ооп головного мозга.
архитектура ради архитектуры.
классы ради классов.

Цитата Сообщение от Igor3D Посмотреть сообщение
В который раз уже "радость начинающего" которому удалось что-то "круто" записать одной строчкой Думаю это и так всем понятно
не распарсил этот поток сознания.
0
1967 / 823 / 114
Регистрация: 01.10.2012
Сообщений: 4,813
Записей в блоге: 2
17.01.2017, 15:10
Цитата Сообщение от hoggy Посмотреть сообщение
ну если вам так будет понятнее:
object.serialize(dataBase);
object.serialize(xml);
Не надо мне одолжений делать Не пишут так по той простой причине что класс object становится зависимым от классов dataBase и xml, и это факт весьма известный.
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
17.01.2017, 15:29
Цитата Сообщение от Igor3D Посмотреть сообщение
Не пишут так
во-первых пишут.

я повторюсь:
в мире с++ boost.serialization/cereal - стандарт де факто.

а во-вторых:
Цитата Сообщение от Igor3D Посмотреть сообщение
по той простой причине что класс object становится зависимым от классов dataBase и xml
это что за бред?
с какой стати, он должен от них зависеть?

на плюсах он даже от интерфейсов может не зависеть.

что касается классического ооп,
полиморфизм? не, не слышал
программирование в терминах интерфейсов? не, не слышал
Банда четырёх, паттерны ? не, не слышал.

зато плодим сущности без всякой необходимости.
которые что-то там про нас знают.
0
Модератор
Эксперт функциональных языков программирования
3133 / 2280 / 469
Регистрация: 26.03.2015
Сообщений: 8,876
17.01.2017, 17:05
Цитата Сообщение от hoggy Посмотреть сообщение
это что за бред?
Бред, это когда у Вас 10 независимых модулей, работающих с одним набором сущностей, и каждый из них должен знать про интерфейсы из всех остальных 9 модулей.
Или когда у Вас для одного набора сущностей есть 10 разных наборов классов и 20 конверторов туда-сюда.

Хотя, в прошлом веке, когда модульности уделялось мало внимания, шаблоны типа "актив рекод" были популярны.
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
17.01.2017, 17:26
Цитата Сообщение от Shamil1 Посмотреть сообщение
Бред, это когда у Вас 10 независимых модулей, работающих с одним набором сущностей, и каждый из них должен знать про интерфейсы из всех остальных 9 модулей.
так это же вы предлагаете на каждый чих заводить абстракцию ради абстракции
Цитата Сообщение от Shamil1 Посмотреть сообщение
Хотя, в прошлом веке, когда модульности уделялось мало внимания, шаблоны типа "актив рекод" были популярны.
казало бы, и при чем тут ActiveRecord?
0
Модератор
Эксперт функциональных языков программирования
3133 / 2280 / 469
Регистрация: 26.03.2015
Сообщений: 8,876
17.01.2017, 18:32
Цитата Сообщение от hoggy Посмотреть сообщение
так это же вы предлагаете на каждый чих заводить абстракцию ради абстракции
Не надо придумывать про меня то, чего не было.
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
17.01.2017, 18:45
Цитата Сообщение от Shamil1 Посмотреть сообщение
Не надо придумывать про меня то, чего не было.
Ищу ментора(ов) по ООП (проектированию архитектуры и реализации)
0
Модератор
Эксперт функциональных языков программирования
3133 / 2280 / 469
Регистрация: 26.03.2015
Сообщений: 8,876
17.01.2017, 21:33
Цитата Сообщение от hoggy Посмотреть сообщение
Ищу ментора(ов) по ООП (проектированию архитектуры и реализации)
В данном сообщении я объясняю, что такое уровень абстракции. А так же на примере показываю, как может расти количество уровней абстракции. В этом сообщении я ничего не говорю о том, как надо делать, а как не надо.
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
17.01.2017, 21:56
Цитата Сообщение от Shamil1 Посмотреть сообщение
В данном сообщении я объясняю, что такое уровень абстракции. А так же на примере показываю, как может расти количество уровней абстракции. В этом сообщении я ничего не говорю о том, как надо делать, а как не надо.
как то не кузяво.
может быть лучше приведете пример, как нужно делать, м?
пример грамотного построения?
0
Заблокирован
18.01.2017, 00:16
Цитата Сообщение от Shamil1 Посмотреть сообщение
А так же на примере показываю, как может расти количество уровней абстракции.
В том примере Вы показали не уровни, а то как можно наплодить кучу бесполезных сущностей на пустом месте, сдуру.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
18.01.2017, 00:16
Помогаю со студенческими работами здесь

Ищу ментора
Всем привет. Есть базовый уровень Python и web — программирование. Ищу ментора для реализации его проектов. Беру на себя...

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

Ищу ментора
Господа, Говорю сразу - не дуб, многие вещи понимаю, знаю или слышал. Просто у меня с постановкой задач для самого себя возникают...

Ищу наставника(ментора)
Я не нашел в разделе web-программистов темы в которой можно задать любой вопрос. По этому решил написать тут. Здравствуйте. Я принял...

Ищу Java ментора
ищу человека,который смодет помочь в изучении Java, направить в нужном направлении,указать на ошибки и т п Изучаю Java около...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
37
Ответ Создать тему
Новые блоги и статьи
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru