Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Тренажер-акселератор ООП-навыков / 25 сообщений из 28, страница 1 из 2
29.11.2011, 12:24
    #37549605
Касаткина Мария
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тренажер-акселератор ООП-навыков
Приветствую любящих программирование :) !

Есть такое понятие, как умение использовать принципы ООП. Так вот хочется:
расширить свое представление о том, что такое плохо в общем случае и почему оно плохо;

натренироваться на практике распознавать нехорошие ситуации и понимать, в чем именно проблема, к каким сложностям она ведет и как ее устранить.

Чтобы было понятнее, какого характера знания-умения хочется получить, приведу несколько примеров :) :
Что видим в коде? Какие сложности ждут? Где локализуется проблема? Как устранить? Название методы интерфейса IInt работают группами, группы почти не пересекаются а) при использовании интерфейса некоторые методы все время мешаются, не нужны даже гипотетически; б) при чтении непонятно, какая часть методов будет задействована в данном куске кода само объявление интерфейса и все классы, использующие его выделить в IInt группы методов, работающих вместе, и разнести эти группы в разные интерфейсы сопряжение нескольких сущностей в одном интерфейсе вместо четкого определения конкретной функциональностиprivate-метод класса ClassParent использует абстрактный метод, реализованный в классе ClassChildBase private-метод воспринимается как вспомогательный метод с четко фиксированным поведением, а на самом деле любой может изменить это поведение через наследников общая структура ClassParent, контракты ClassParent и ClassChildBase может быть, в данной ситуации так и надо? возможность изменить поведение родителя через его наследников
Еще примеры Что видим в коде? Какие сложности ждут? Где локализуется проблема? Как устранить? Название класс-родитель и его наследники, в наследниках много похожих/одинаковых реализаций методов а) сложнее выделить специфику каждого из наследников, она "замутнена" лишним кодом; б) дублирование кода со всеми вытекающими конкретные методы в классах-наследниках вынести "одинаковость" в родителя и оставить в нем абстрактный ключик, ведущий в наследников и отвечающий за непохожесть неудачное распределение функциональности между наследником и родителемCEntityBase реализует IEntity, имеет наследников CEntity1 и CEntity2, не имеет собственных полей и методов CEntityBase как-то дополняет/конкретизирует/расширяет функциональность IEntity? когда нужно использовать интерфейс, а когда - базовый класс? контракты IEntity и CEntityBase оставить или IEntity, или CEntityBase в зависимости от контекста размножение сущностей без необходимостиметоды класса получают на вход объект; иногда класс сам проводит подготовительные-проверяющие действия для объекта, а иногда считает, что ему на вход поступает уже правильный объект а) поведение не определено точно и неизвестно, чего ожидать - класс сложно использовать; б) проверка-подготовка то проводится несколько раз, то не проводится ни одного; в) размазывание ответственности сам контракт класса и все контексты, в которых он использовался повешаться или четко распределить ответственность и привести весь код в соответствие этому распределению невнятный контракт, нечеткое определение зоны ответственности
Надеюсь, более-менее понятно описала, что хочется :) . Причем нужно не прочитать готовый анализ или вообще готовое решение (как в известной книге четырех ), а пропустить все через себя, пройти (почти) весь путь анализа самостоятельно .

Пока знаю ровно два способа такие навыки развить:

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

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

Может быть, есть какие-то книги-тренажеры ( "вот, смотрите, код... какая проблема в нем? подумайте... теперь можете подсмотреть в мой ответ... а как решить проблему? ну-ну, давайте, догадывайтесь... да, именно так! а как еще эта проблема проявляется? можете другие примеры кода придумать?" )?
Или какие-то сайты, на которых собраны плохие примеры, их анализ и способы исправления?
...
Рейтинг: 0 / 0
29.11.2011, 12:52
    #37549691
Worobjoff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тренажер-акселератор ООП-навыков
По-моему, правильное использование ООП - это навыки а не знания. Как навык рисования или спортивной игры.
Пока это просто знания - ООП мешает.

Особенно мешает когда начинающий оопист начинает натягивать плоскую бизнес-логику на свое страстное желание реализовать пятиуровневую иерархию наследования.
...
Рейтинг: 0 / 0
29.11.2011, 13:21
    #37549797
Касаткина Мария
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тренажер-акселератор ООП-навыков
Worobjoff, конечно :) .
Даже не представляю, как можно знать ООП (разве что определения инкапсуляции-наследования-полиморфизма, да и то пока их не прочувствуешь на примерах с разных сторон, врядли что-то близкое к правде сформулируешь).
Может быть, табличка натолкнула вас на такие мысли? Она действительно производит впечатление каких-то теоретических изысканий, может показаться попыткой что-то зазубрить и применять где ни попадя... Вобщем это ложное впечатление, табличка родилась именно из выстраданных навыков :) .

Итак, получение навыков... Но не вялотекущее получение, а целенаправленная тренировка на специальных примерах . Просто работая с кодом, ты можешь столкнуться с проблемой, а можешь и не столкнуться; если столкнешься, то будешь исправлять одни и те же ошибки несколько раз, ... . А с коллекцией компактных примеров плохого использования ООП дело пойдет куда лучше, вот только где она :)) ?
...
Рейтинг: 0 / 0
29.11.2011, 13:34
    #37549840
Worobjoff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тренажер-акселератор ООП-навыков
В таблице очень полезные вещи. Но что-то касается навыков, а что-то просто чистоты кода.
Вот это
методы класса получают на вход объект; иногда класс сам проводит подготовительные-проверяющие действия для объекта, а иногда считает, что ему на вход поступает уже правильный объект
Касается архитектуры и здесь нужно делать четкий и однозначный выбор на весь проект.

а это:
методы интерфейса IInt работают группами, группы почти не пересекаются
- невинная неряшливость.
...
Рейтинг: 0 / 0
29.11.2011, 14:19
    #37549970
Яростный Меч
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тренажер-акселератор ООП-навыков
авторТренажер-акселератор ООП-навыковжизнь - вот лучший тренажер, да.
...
Рейтинг: 0 / 0
29.11.2011, 14:29
    #37550017
tchingiz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тренажер-акселератор ООП-навыков
Касаткина Мария,
ну, решите задачку как упорядочить наследованием натуральные, целые, рациональные.
Кто чей родитель. И кто из них подтип кого.
...
Рейтинг: 0 / 0
29.11.2011, 14:53
    #37550068
egorych
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тренажер-акселератор ООП-навыков
tchingizКасаткина Мария,
ну, решите задачку как упорядочить наследованием натуральные, целые, рациональные.
Кто чей родитель. И кто из них подтип кого.и квадраты с прямоугольниками ещё, конечно, на закуску ))
...
Рейтинг: 0 / 0
29.11.2011, 19:21
    #37550695
Касаткина Мария
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тренажер-акселератор ООП-навыков
WorobjoffВ таблице очень полезные вещи. Но что-то касается навыков, а что-то просто чистоты кода.
...
Касается архитектуры и здесь нужно делать четкий и однозначный выбор на весь проект.:)

Worobjoffа это:
методы интерфейса IInt работают группами, группы почти не пересекаются
- невинная неряшливость.Теперь знаю, что кто-то совсем не считает это проблемой. Спасибо :) .

Яростный МечавторТренажер-акселератор ООП-навыковжизнь - вот лучший тренажер, да.Да, кстати! Если вы в жизнь не видели никаких тренажеров или не верите в их эффективность, тоже не стесняйтесь писать! Это тоже важно :) !
Можно просто плюсик к этому сообщению поставить - я все пойму ;) .
...
Рейтинг: 0 / 0
29.11.2011, 19:30
    #37550710
Касаткина Мария
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тренажер-акселератор ООП-навыков
tchingizКасаткина Мария,
ну, решите задачку как упорядочить наследованием натуральные, целые, рациональные.
Кто чей родитель. И кто из них подтип кого.egorychи квадраты с прямоугольниками ещё, конечно, на закуску ))Не вижу смысла как-то упорядочивать наследованием относительно друг друга ни числа, ни квадрат с прямоугольником. Более того, мне это действие вообще кажется каким-то противоестественным: рациональное число совсем не повторяет структуру натурального, квадрат заставить работать как прямоугольник тоже непросто (т.е. можно, конечно, но придется уже искусственно вводить для него ширину и высоту).

Но общее у них, конечно, есть - функциональность. Для чисел это умение складываться/умножаться с кем-то, получать модуль и квадрат себя, для квадрата и прямоугольника - умение отрисовывать себя и т.п.. Для этого всего, по-моему, достаточно просто интерфейса :) .

tchingiz...tchingiz, у вас в профиле очень интересная фраза о формализации ООП :) . Вы явно что-то знаете ;) !
...
Рейтинг: 0 / 0
29.11.2011, 19:49
    #37550749
Касаткина Мария
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тренажер-акселератор ООП-навыков
tchingizКасаткина Мария,
ну, решите задачку как упорядочить наследованием натуральные, целые, рациональные.
Кто чей родитель. И кто из них подтип кого.Как-то так:
Кусочек кода:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
 public   interface  IsNumber
{
	 public  IsNumber getModulus ();
	 public  IsNumber getSquared ();

	 public  IsNumber add (IsNumber toAdd);
	...
}

 public   class  NumberNatural
	 implements  IsNumber
{
	// значение, присваиваемое m_value, проверяется на >0
	 private   int  m_value;
}

 public   class  NumberWhole
	 implements  IsNumber
{
	// если нужен ноль, то m_sign = 0
	 private   byte 		m_sign;
	 private  NumberNatural	m_modulus;
}

 public   class  NumberRational
	 implements  IsNumber
{
	 private  NumberWhole	m_numerator;
	 private  NumberWhole	m_denominator;
}

 public   class  NumberComplex
	 implements  IsNumber
{
	 private  NumberRational	m_re;
	 private  NumberRational	m_im;
}
egorychи квадраты с прямоугольниками ещё, конечно, на закуску ))Если считать, что стоит задача сделать все максимально универсально и правильно с точки зрения ООП, то для квадрата и прямоугольника я бы сделала что-то такое:



Это как-то помогает выйти на тренажер :) ?
...
Рейтинг: 0 / 0
29.11.2011, 20:09
    #37550768
tchingiz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тренажер-акселератор ООП-навыков
Касаткина Мария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

такую эээээээ фигню несут цепочку кроме Вас используют только два или три философа.

Вас не спрашивают про смысл задачи, а попросили ее решить.
В ответ можно или решить задачу,
или доказать, что она нерешабельна,
или отказаться от ее решения.
Вы, похоже, отказались.
...
Рейтинг: 0 / 0
29.11.2011, 20:09
    #37550770
tchingiz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тренажер-акселератор ООП-навыков
egorychtchingizКасаткина Мария,
ну, решите задачку как упорядочить наследованием натуральные, целые, рациональные.
Кто чей родитель. И кто из них подтип кого.и квадраты с прямоугольниками ещё, конечно, на закуску ))
ну есть еще у нас мелкие недостатки
)))
...
Рейтинг: 0 / 0
29.11.2011, 20:18
    #37550780
Leonidv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тренажер-акселератор ООП-навыков
Касаткина МарияПриветствую любящих программирование :) !

Есть такое понятие, как умение использовать принципы ООП. Так вот хочется:
расширить свое представление о том, что такое плохо в общем случае и почему оно плохо;

натренироваться на практике распознавать нехорошие ситуации и понимать, в чем именно проблема, к каким сложностям она

Рефакторинг Фаулера, Чистый код Мартина, Совершенный код МакКоннела.

Здравый смысл как последний довод.
...
Рейтинг: 0 / 0
29.11.2011, 21:14
    #37550884
Касаткина Мария
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тренажер-акселератор ООП-навыков
tchingiz...Вы что-то сильно перепутали: по теме ничего не написали, по вами же предложенной задаче ничего не написали, приняли какой-то повышенный тон... И цепочки нет никакой.
Если считаете, что что-то не так, то поясните, где именно, почему именно и т.п., или хотя бы приведите конкретные контр-примеры, а разбрасываться общими фразами не надо. Беспредметными препирательствами заниматься нет никакого желания (и возможности, к счастью, тоже).

LeonidvРефакторинг Фаулера, Чистый код Мартина, Совершенный код МакКоннела.О, наконец-то что-то есть :) ! Спасибо большое, посмотрю прямо сейчас.

LeonidvЗдравый смысл как последний довод.
Почему последний-то :) ?! А что тогда на первом месте ;) ?
...
Рейтинг: 0 / 0
29.11.2011, 21:18
    #37550887
Яростный Меч
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тренажер-акселератор ООП-навыков
Касаткина МарияЯростный МечавторТренажер-акселератор ООП-навыковжизнь - вот лучший тренажер, да.Да, кстати! Если вы в жизнь не видели никаких тренажеров или не верите в их эффективность, тоже не стесняйтесь писать!для накачки мускулов оные вполне подходят, вы не волнуйтесь, у меня с этим полный порядок :)
а "тренажеры для изучения ООП" - впервые слышу.
...
Рейтинг: 0 / 0
29.11.2011, 21:36
    #37550931
kolobok0
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тренажер-акселератор ООП-навыков
Касаткина Мария....приведу несколько примеров...

когда напишите примеры из области ООА и ООП - скажите. Пока вижу чисто технический инструментарий. Вас для понимания - отсылаю эээээээээээ близко, к Гради Бучу. Это один из основателей. Рекомендую читать его книгу внимательно, не торопясь, лучше попутно решая задачи из своей работы. После 3 - 5 задачи прийдёт просветление.


а язык - это просто язык.
я собственно очень часто использую ООА при написании программ на азме. какая нафик разница то? или Вы только полиморфизм считаете за ОО? тогда это не понимание предмета...

удачи вам, она вам потребуется
(круглый)
...
Рейтинг: 0 / 0
29.11.2011, 21:50
    #37550950
жук ботан
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тренажер-акселератор ООП-навыков
tchingizКасаткина Мария,
ну, решите задачку как упорядочить наследованием натуральные, целые, рациональные.
Кто чей родитель. И кто из них подтип кого.

опять )
...
Рейтинг: 0 / 0
30.11.2011, 02:10
    #37551157
egorych
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тренажер-акселератор ООП-навыков
Касаткина МарияЭто как-то помогает выйти на тренажер :) ?да нет, Мария, вы не поняли, не обижайтесь, ради бога. Эти две задачи, числа и квадраты - старые излюбленные темы здесь на форуме, если про ООП. Вон, верхний закрытый прибитый тред про design by contract на 2/3 им посвящён. ))
...
Рейтинг: 0 / 0
30.11.2011, 02:11
    #37551158
egorych
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тренажер-акселератор ООП-навыков
жук ботанопять )а чё, давно уже не вспоминали-то ;-))
...
Рейтинг: 0 / 0
30.11.2011, 03:02
    #37551178
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тренажер-акселератор ООП-навыков
Через 100 страниц (Всем привет!) сюда подтянутся Лисёк с Баз-ом. Они вам покажут акселератор ООП... хе-хе...
...
Рейтинг: 0 / 0
30.11.2011, 08:54
    #37551287
k0rvin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тренажер-акселератор ООП-навыков
tchingizну есть еще у нас мелкие недостатки
)))

ua.agp1.typesSetsClasses 0.99, стр. 5, последний абзац 2.1:
В Функциональном программировании на Haskel [4] утверждается
тоже самое:
...
Рейтинг: 0 / 0
30.11.2011, 08:58
    #37551290
k0rvin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тренажер-акселератор ООП-навыков
и тут же: s/тоже самое/то же самое/
...
Рейтинг: 0 / 0
30.11.2011, 09:36
    #37551321
Worobjoff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тренажер-акселератор ООП-навыков
Да, Фаулер конечно! Я думал вы уже знаете о нем.
Поищите его статьи, Например здесь
Почитайте код, особенно интересно как он развивает программный код по ходу изложения статьи
...
Рейтинг: 0 / 0
30.11.2011, 12:35
    #37551724
ИринаВ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тренажер-акселератор ООП-навыков
Касаткина МарияLeonidvЗдравый смысл как последний довод.
Почему последний-то :) ?! А что тогда на первом месте ;) ?
Воот. Мне не оч. нра исх. постановка: ООП, это жеж не самостоятеьная ценность, а метод. Не?
А выбор метода ИМХО должен вытекать из задачи + это вопрпос личного вкуса. Соотв. навыки ООП развиваются ТОЛЬКО из опыта решения задач, к-рые "просятся" на этот метод.
Хотя: иногда ООП, это требование, от начальства, к-рое дурных книжек начиталось, на ночь.
...
Рейтинг: 0 / 0
30.11.2011, 14:10
    #37552013
tchingiz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тренажер-акселератор ООП-навыков
k0rvinи тут же: s/тоже самое/то же самое/
спасибо, фиксед. тек. версия 0.992
...
Рейтинг: 0 / 0
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Тренажер-акселератор ООП-навыков / 25 сообщений из 28, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]