Объектно-ориентированная декомпозиция -- что это такое
Primary tabs
Forums:
Сразу отметим, что есть и более общее понятие декомпозиции кода.
Объектно-ориентированная декомпозиция - это разбиение системы на сущности, являющиеся какими-либо объектами действующими в той ситуации, которую как раз и моделирует система.
Такая декомпозиция считается "более продвинутой" (при разработке сложных систем) в отличии от Алгоритмической -
при которой просто происходит разбиение функционала - ни по отношению к сущности (типа -набор методов в данном классе реализует функционал описываемого объекта) , а просто "сверху вниз" - то есть об общего к частному.
Например при алгоритмической композиции - в случае если требуется описать порцесс кормления коровы - никто не будет создавать два класса , например =
- корова
- + человек
- как в случае объектно-ориентированной декомпозиции, а просто начнут уточнять функционал, например так (вначале написав базовую функцию)=
- 1) покормить_корову()
- 2) купить_корм() + покормить_корову()
- 3) купить_корм() + насыпать_корм_в_кормушку() + убедится_что_корова_начала_есть()
- 4) и т.д.
то есть при алгоритмической декомпозиции функционал просто уточняется и разбивается на части - без относительно того к каким объектам он имеет отношения или какими объектами данные функции выполняются.
подробнее читаем здесь = http://www.helloworld.ru/texts/comp/othe...
- Log in to post comments
- 32736 reads
humanmashine
Sat, 09/15/2012 - 19:04
Permalink
Если честно, то нигде не
Если честно, то нигде не видел, чтобы в ООП применяли разбиение по функционалу, описанное выше, не считая людей, которые иногда получают от меня звание "быдлокодер" ))) не в обиду будет сказано, я и сам бываю часто "быдлокодером" от незнания.
Но во всей литературе по ООП, ранее, я встречал как раз описание объектов, а не разбиение по функционалу (этот метод можно встретить в основном в языках не поддерживающих ООП, или поддерживающих наряду с функциональным программированием С/С++)
Так что когда я впервые начал программировать на Qt-C++ то уже там было как раз рекомендовано разбиение по объектам, а Брюс Эккель так и писал, что представьте перед собой волшебную шляпу и доставайте от туда объекты, необходимые для решения задачи)))) Таким образом в программе будут именно объекты вида "корова".
В виду этого, для меня было открытие, что существует такое термин "Объектно-ориентированная декомпозиция". Немного повергло в шок то, что кто-то в ООП разбивает по функционалу - люди, не делайте так.
vedro-compota
Sat, 09/15/2012 - 19:42
Permalink
неееееее!!!
неееееее!!!
я думал, что пишу непонятно,но всё рано продолжал))
по функционалу разбиение происходит при алгоритмической декомпозиции -
я просто там всё сравниваю со всем и потому читать надо внимательнее)))
_____________
матфак вгу и остальная классика =)
humanmashine
Sun, 09/16/2012 - 11:12
Permalink
А я про что? Я и говорю, что
А я про что? Я и говорю, что алгоритмическая декомпозиция в ООП не используется, то есть я до этого поста не встречал. Как бы, по моему опыту, всегда и везде используют объектно-ориентированную декомпозицию.
vedro-compota
Sun, 09/16/2012 - 11:56
Permalink
да ) но заметьте - выше и не
да ) но заметьте - выше и не говорится. что алгоритмическая декомпозиция используется в ООП - а точнее при ООАП
Алгоритмическая декомпозиция используется при функциональном подходе.
_____________
матфак вгу и остальная классика =)
humanmashine
Sun, 09/16/2012 - 22:41
Permalink
Полностью соглашусь, но в
Полностью соглашусь, но в функциональном программировании нет классов))) По крайней мере то что там иногда называется классами - это не совсем классы. Но это не та тема которую надо долго обсуждать.
vedro-compota
Sun, 09/16/2012 - 23:23
Permalink
зм) так ведь ваше как раз и
зм) так ведь ваше как раз и производится уточнение "функций". типа - накормить_корову() -на самом деле содержит много разных "подфункций" )

алгоритмическая декомпозиция призвана эти подфункции выделить)
_____________
матфак вгу и остальная классика =)
humanmashine
Mon, 09/17/2012 - 12:21
Permalink
Ладно - сдаюсь, так как уже
Ладно - сдаюсь, так как уже совсем потерял нить обсуждения))))