|
|
|
Тренажер-акселератор ООП-навыков
|
|||
|---|---|---|---|
|
#18+
Приветствую любящих программирование :) ! Есть такое понятие, как умение использовать принципы ООП. Так вот хочется: расширить свое представление о том, что такое плохо в общем случае и почему оно плохо; натренироваться на практике распознавать нехорошие ситуации и понимать, в чем именно проблема, к каким сложностям она ведет и как ее устранить. Чтобы было понятнее, какого характера знания-умения хочется получить, приведу несколько примеров :) : Что видим в коде? Какие сложности ждут? Где локализуется проблема? Как устранить? Название методы интерфейса IInt работают группами, группы почти не пересекаются а) при использовании интерфейса некоторые методы все время мешаются, не нужны даже гипотетически; б) при чтении непонятно, какая часть методов будет задействована в данном куске кода само объявление интерфейса и все классы, использующие его выделить в IInt группы методов, работающих вместе, и разнести эти группы в разные интерфейсы сопряжение нескольких сущностей в одном интерфейсе вместо четкого определения конкретной функциональностиprivate-метод класса ClassParent использует абстрактный метод, реализованный в классе ClassChildBase private-метод воспринимается как вспомогательный метод с четко фиксированным поведением, а на самом деле любой может изменить это поведение через наследников общая структура ClassParent, контракты ClassParent и ClassChildBase может быть, в данной ситуации так и надо? возможность изменить поведение родителя через его наследников Еще примеры Что видим в коде? Какие сложности ждут? Где локализуется проблема? Как устранить? Название класс-родитель и его наследники, в наследниках много похожих/одинаковых реализаций методов а) сложнее выделить специфику каждого из наследников, она "замутнена" лишним кодом; б) дублирование кода со всеми вытекающими конкретные методы в классах-наследниках вынести "одинаковость" в родителя и оставить в нем абстрактный ключик, ведущий в наследников и отвечающий за непохожесть неудачное распределение функциональности между наследником и родителемCEntityBase реализует IEntity, имеет наследников CEntity1 и CEntity2, не имеет собственных полей и методов CEntityBase как-то дополняет/конкретизирует/расширяет функциональность IEntity? когда нужно использовать интерфейс, а когда - базовый класс? контракты IEntity и CEntityBase оставить или IEntity, или CEntityBase в зависимости от контекста размножение сущностей без необходимостиметоды класса получают на вход объект; иногда класс сам проводит подготовительные-проверяющие действия для объекта, а иногда считает, что ему на вход поступает уже правильный объект а) поведение не определено точно и неизвестно, чего ожидать - класс сложно использовать; б) проверка-подготовка то проводится несколько раз, то не проводится ни одного; в) размазывание ответственности сам контракт класса и все контексты, в которых он использовался повешаться или четко распределить ответственность и привести весь код в соответствие этому распределению невнятный контракт, нечеткое определение зоны ответственности Пока знаю ровно два способа такие навыки развить: разглядывание существующего кода и попытки сделать что-то с ним (если коряво спроектировано, сразу же почувствуешь, где препятствия ; если все хорошо, то потребуется больше усилий, чтобы понять, засчет чего так получается); беседа с опытными и хорошими товарищами (садится рядом, обращает внимание на какую-то часть кода, предлагает подумать о сложностях сейчас, при разрастании и при изменении требований, о способах устранения, может помогать наводящими вопросами, дополняет, ...). Буду безумно счастлива, если удастся найти нечто, дающее более целенаправленный и быстрый результат, чем разглядывание существующего кода, и поменьше нагружающее других людей. Может быть, есть какие-то книги-тренажеры ( "вот, смотрите, код... какая проблема в нем? подумайте... теперь можете подсмотреть в мой ответ... а как решить проблему? ну-ну, давайте, догадывайтесь... да, именно так! а как еще эта проблема проявляется? можете другие примеры кода придумать?" )? Или какие-то сайты, на которых собраны плохие примеры, их анализ и способы исправления? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2011, 12:24 |
|
||
|
Тренажер-акселератор ООП-навыков
|
|||
|---|---|---|---|
|
#18+
По-моему, правильное использование ООП - это навыки а не знания. Как навык рисования или спортивной игры. Пока это просто знания - ООП мешает. Особенно мешает когда начинающий оопист начинает натягивать плоскую бизнес-логику на свое страстное желание реализовать пятиуровневую иерархию наследования. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2011, 12:52 |
|
||
|
Тренажер-акселератор ООП-навыков
|
|||
|---|---|---|---|
|
#18+
Worobjoff, конечно :) . Даже не представляю, как можно знать ООП (разве что определения инкапсуляции-наследования-полиморфизма, да и то пока их не прочувствуешь на примерах с разных сторон, врядли что-то близкое к правде сформулируешь). Может быть, табличка натолкнула вас на такие мысли? Она действительно производит впечатление каких-то теоретических изысканий, может показаться попыткой что-то зазубрить и применять где ни попадя... Вобщем это ложное впечатление, табличка родилась именно из выстраданных навыков :) . Итак, получение навыков... Но не вялотекущее получение, а целенаправленная тренировка на специальных примерах . Просто работая с кодом, ты можешь столкнуться с проблемой, а можешь и не столкнуться; если столкнешься, то будешь исправлять одни и те же ошибки несколько раз, ... . А с коллекцией компактных примеров плохого использования ООП дело пойдет куда лучше, вот только где она :)) ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2011, 13:21 |
|
||
|
Тренажер-акселератор ООП-навыков
|
|||
|---|---|---|---|
|
#18+
В таблице очень полезные вещи. Но что-то касается навыков, а что-то просто чистоты кода. Вот это методы класса получают на вход объект; иногда класс сам проводит подготовительные-проверяющие действия для объекта, а иногда считает, что ему на вход поступает уже правильный объект Касается архитектуры и здесь нужно делать четкий и однозначный выбор на весь проект. а это: методы интерфейса IInt работают группами, группы почти не пересекаются - невинная неряшливость. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2011, 13:34 |
|
||
|
Тренажер-акселератор ООП-навыков
|
|||
|---|---|---|---|
|
#18+
авторТренажер-акселератор ООП-навыковжизнь - вот лучший тренажер, да. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2011, 14:19 |
|
||
|
Тренажер-акселератор ООП-навыков
|
|||
|---|---|---|---|
|
#18+
Касаткина Мария, ну, решите задачку как упорядочить наследованием натуральные, целые, рациональные. Кто чей родитель. И кто из них подтип кого. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2011, 14:29 |
|
||
|
Тренажер-акселератор ООП-навыков
|
|||
|---|---|---|---|
|
#18+
tchingizКасаткина Мария, ну, решите задачку как упорядочить наследованием натуральные, целые, рациональные. Кто чей родитель. И кто из них подтип кого.и квадраты с прямоугольниками ещё, конечно, на закуску )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2011, 14:53 |
|
||
|
Тренажер-акселератор ООП-навыков
|
|||
|---|---|---|---|
|
#18+
WorobjoffВ таблице очень полезные вещи. Но что-то касается навыков, а что-то просто чистоты кода. ... Касается архитектуры и здесь нужно делать четкий и однозначный выбор на весь проект.:) Worobjoffа это: методы интерфейса IInt работают группами, группы почти не пересекаются - невинная неряшливость.Теперь знаю, что кто-то совсем не считает это проблемой. Спасибо :) . Яростный МечавторТренажер-акселератор ООП-навыковжизнь - вот лучший тренажер, да.Да, кстати! Если вы в жизнь не видели никаких тренажеров или не верите в их эффективность, тоже не стесняйтесь писать! Это тоже важно :) ! Можно просто плюсик к этому сообщению поставить - я все пойму ;) . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2011, 19:21 |
|
||
|
Тренажер-акселератор ООП-навыков
|
|||
|---|---|---|---|
|
#18+
tchingizКасаткина Мария, ну, решите задачку как упорядочить наследованием натуральные, целые, рациональные. Кто чей родитель. И кто из них подтип кого.egorychи квадраты с прямоугольниками ещё, конечно, на закуску ))Не вижу смысла как-то упорядочивать наследованием относительно друг друга ни числа, ни квадрат с прямоугольником. Более того, мне это действие вообще кажется каким-то противоестественным: рациональное число совсем не повторяет структуру натурального, квадрат заставить работать как прямоугольник тоже непросто (т.е. можно, конечно, но придется уже искусственно вводить для него ширину и высоту). Но общее у них, конечно, есть - функциональность. Для чисел это умение складываться/умножаться с кем-то, получать модуль и квадрат себя, для квадрата и прямоугольника - умение отрисовывать себя и т.п.. Для этого всего, по-моему, достаточно просто интерфейса :) . tchingiz...tchingiz, у вас в профиле очень интересная фраза о формализации ООП :) . Вы явно что-то знаете ;) ! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2011, 19:30 |
|
||
|
Тренажер-акселератор ООП-навыков
|
|||
|---|---|---|---|
|
#18+
Касаткина МарияtchingizКасаткина Мария, ну, решите задачку как упорядочить наследованием натуральные, целые, рациональные. Кто чей родитель. И кто из них подтип кого.egorychи квадраты с прямоугольниками ещё, конечно, на закуску ))Не вижу смысла как-то упорядочивать наследованием относительно друг друга ни числа, ни квадрат с прямоугольником. Более того, мне это действие вообще кажется каким-то противоестественным: рациональное число совсем не повторяет структуру натурального, лично мне кажется противоестественной фраза "рациональное число не повторяет структуру натурального" равно как и гуглю. Ибо как видно из поиска http://www.google.com.ua/#hl=ru&gbv=2&q=%22%D1%81%D1%82%D1%80%D1%83%D0%BA%D1%82%D1%83%D1%80%D0%B0+%D0%BD%D0%B0%D1%82%D1%83%D1%80%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B3%D0%BE+%D1%87%D0%B8%D1%81%D0%BB%D0%B0%22&oq=%22%D1%81%D1%82%D1%80%D1%83%D0%BA%D1%82%D1%83%D1%80%D0%B0+%D0%BD%D0%B0%D1%82%D1%83%D1%80%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B3%D0%BE+%D1%87%D0%B8%D1%81%D0%BB%D0%B0%22&aq=f&aqi=&aql=1&gs_sm=e&gs_upl=7074l17550l0l18510l23l21l1l0l0l0l286l2883l5.9.5l19l0&bav=on.2,or.r_gc.r_pw.,cf.osb&fp=d1bb1bdd18f53049&biw=1420&bih=759 такую эээээээ фигню несут цепочку кроме Вас используют только два или три философа. Вас не спрашивают про смысл задачи, а попросили ее решить. В ответ можно или решить задачу, или доказать, что она нерешабельна, или отказаться от ее решения. Вы, похоже, отказались. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2011, 20:09 |
|
||
|
Тренажер-акселератор ООП-навыков
|
|||
|---|---|---|---|
|
#18+
egorychtchingizКасаткина Мария, ну, решите задачку как упорядочить наследованием натуральные, целые, рациональные. Кто чей родитель. И кто из них подтип кого.и квадраты с прямоугольниками ещё, конечно, на закуску )) ну есть еще у нас мелкие недостатки ))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2011, 20:09 |
|
||
|
Тренажер-акселератор ООП-навыков
|
|||
|---|---|---|---|
|
#18+
Касаткина МарияПриветствую любящих программирование :) ! Есть такое понятие, как умение использовать принципы ООП. Так вот хочется: расширить свое представление о том, что такое плохо в общем случае и почему оно плохо; натренироваться на практике распознавать нехорошие ситуации и понимать, в чем именно проблема, к каким сложностям она Рефакторинг Фаулера, Чистый код Мартина, Совершенный код МакКоннела. Здравый смысл как последний довод. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2011, 20:18 |
|
||
|
Тренажер-акселератор ООП-навыков
|
|||
|---|---|---|---|
|
#18+
tchingiz...Вы что-то сильно перепутали: по теме ничего не написали, по вами же предложенной задаче ничего не написали, приняли какой-то повышенный тон... И цепочки нет никакой. Если считаете, что что-то не так, то поясните, где именно, почему именно и т.п., или хотя бы приведите конкретные контр-примеры, а разбрасываться общими фразами не надо. Беспредметными препирательствами заниматься нет никакого желания (и возможности, к счастью, тоже). LeonidvРефакторинг Фаулера, Чистый код Мартина, Совершенный код МакКоннела.О, наконец-то что-то есть :) ! Спасибо большое, посмотрю прямо сейчас. LeonidvЗдравый смысл как последний довод. Почему последний-то :) ?! А что тогда на первом месте ;) ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2011, 21:14 |
|
||
|
Тренажер-акселератор ООП-навыков
|
|||
|---|---|---|---|
|
#18+
Касаткина МарияЯростный МечавторТренажер-акселератор ООП-навыковжизнь - вот лучший тренажер, да.Да, кстати! Если вы в жизнь не видели никаких тренажеров или не верите в их эффективность, тоже не стесняйтесь писать!для накачки мускулов оные вполне подходят, вы не волнуйтесь, у меня с этим полный порядок :) а "тренажеры для изучения ООП" - впервые слышу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2011, 21:18 |
|
||
|
Тренажер-акселератор ООП-навыков
|
|||
|---|---|---|---|
|
#18+
Касаткина Мария....приведу несколько примеров... когда напишите примеры из области ООА и ООП - скажите. Пока вижу чисто технический инструментарий. Вас для понимания - отсылаю эээээээээээ близко, к Гради Бучу. Это один из основателей. Рекомендую читать его книгу внимательно, не торопясь, лучше попутно решая задачи из своей работы. После 3 - 5 задачи прийдёт просветление. а язык - это просто язык. я собственно очень часто использую ООА при написании программ на азме. какая нафик разница то? или Вы только полиморфизм считаете за ОО? тогда это не понимание предмета... удачи вам, она вам потребуется (круглый) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2011, 21:36 |
|
||
|
Тренажер-акселератор ООП-навыков
|
|||
|---|---|---|---|
|
#18+
tchingizКасаткина Мария, ну, решите задачку как упорядочить наследованием натуральные, целые, рациональные. Кто чей родитель. И кто из них подтип кого. опять ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2011, 21:50 |
|
||
|
Тренажер-акселератор ООП-навыков
|
|||
|---|---|---|---|
|
#18+
Касаткина МарияЭто как-то помогает выйти на тренажер :) ?да нет, Мария, вы не поняли, не обижайтесь, ради бога. Эти две задачи, числа и квадраты - старые излюбленные темы здесь на форуме, если про ООП. Вон, верхний закрытый прибитый тред про design by contract на 2/3 им посвящён. )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2011, 02:10 |
|
||
|
Тренажер-акселератор ООП-навыков
|
|||
|---|---|---|---|
|
#18+
жук ботанопять )а чё, давно уже не вспоминали-то ;-)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2011, 02:11 |
|
||
|
Тренажер-акселератор ООП-навыков
|
|||
|---|---|---|---|
|
#18+
Через 100 страниц (Всем привет!) сюда подтянутся Лисёк с Баз-ом. Они вам покажут акселератор ООП... хе-хе... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2011, 03:02 |
|
||
|
Тренажер-акселератор ООП-навыков
|
|||
|---|---|---|---|
|
#18+
tchingizну есть еще у нас мелкие недостатки ))) ua.agp1.typesSetsClasses 0.99, стр. 5, последний абзац 2.1: В Функциональном программировании на Haskel [4] утверждается тоже самое: ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2011, 08:54 |
|
||
|
Тренажер-акселератор ООП-навыков
|
|||
|---|---|---|---|
|
#18+
и тут же: s/тоже самое/то же самое/ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2011, 08:58 |
|
||
|
Тренажер-акселератор ООП-навыков
|
|||
|---|---|---|---|
|
#18+
Да, Фаулер конечно! Я думал вы уже знаете о нем. Поищите его статьи, Например здесь Почитайте код, особенно интересно как он развивает программный код по ходу изложения статьи ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2011, 09:36 |
|
||
|
Тренажер-акселератор ООП-навыков
|
|||
|---|---|---|---|
|
#18+
Касаткина МарияLeonidvЗдравый смысл как последний довод. Почему последний-то :) ?! А что тогда на первом месте ;) ? Воот. Мне не оч. нра исх. постановка: ООП, это жеж не самостоятеьная ценность, а метод. Не? А выбор метода ИМХО должен вытекать из задачи + это вопрпос личного вкуса. Соотв. навыки ООП развиваются ТОЛЬКО из опыта решения задач, к-рые "просятся" на этот метод. Хотя: иногда ООП, это требование, от начальства, к-рое дурных книжек начиталось, на ночь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2011, 12:35 |
|
||
|
|

start [/forum/topic.php?fid=16&msg=37550710&tid=1342544]: |
0ms |
get settings: |
6ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
162ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
63ms |
get tp. blocked users: |
1ms |
| others: | 223ms |
| total: | 485ms |

| 0 / 0 |
