Объектно-ориентированная декомпозиция -- что это такое

Сразу отметим, что есть и более общее понятие декомпозиции кода.

покормить корову фкн вгу

Объектно-ориентированная декомпозиция - это разбиение системы на сущности, являющиеся какими-либо объектами действующими в той ситуации, которую как раз и моделирует система.

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

Например при алгоритмической композиции - в случае если требуется описать порцесс кормления коровы - никто не будет создавать два класса , например =

  1. корова
  2. + человек

- как в случае объектно-ориентированной декомпозиции, а просто начнут уточнять функционал, например так (вначале написав базовую функцию)=

  • 1) покормить_корову()
  • 2) купить_корм() + покормить_корову()
  • 3) купить_корм() + насыпать_корм_в_кормушку() + убедится_что_корова_начала_есть()
  • 4) и т.д.

то есть при алгоритмической декомпозиции функционал просто уточняется и разбивается на части - без относительно того к каким объектам он имеет отношения или какими объектами данные функции выполняются.

подробнее читаем здесь = http://www.helloworld.ru/texts/comp/othe...

Key Words for FKN + antitotal forum (CS VSU):

humanmashine's picture

Если честно, то нигде не видел, чтобы в ООП применяли разбиение по функционалу, описанное выше, не считая людей, которые иногда получают от меня звание "быдлокодер" ))) не в обиду будет сказано, я и сам бываю часто "быдлокодером" от незнания.
Но во всей литературе по ООП, ранее, я встречал как раз описание объектов, а не разбиение по функционалу (этот метод можно встретить в основном в языках не поддерживающих ООП, или поддерживающих наряду с функциональным программированием С/С++)
Так что когда я впервые начал программировать на Qt-C++ то уже там было как раз рекомендовано разбиение по объектам, а Брюс Эккель так и писал, что представьте перед собой волшебную шляпу и доставайте от туда объекты, необходимые для решения задачи)))) Таким образом в программе будут именно объекты вида "корова".
В виду этого, для меня было открытие, что существует такое термин "Объектно-ориентированная декомпозиция". Немного повергло в шок то, что кто-то в ООП разбивает по функционалу - люди, не делайте так.

vedro-compota's picture

неееееее!!!
я думал, что пишу непонятно,но всё рано продолжал))

по функционалу разбиение происходит при алгоритмической декомпозиции -
я просто там всё сравниваю со всем и потому читать надо внимательнее)))

_____________
матфак вгу и остальная классика =)

humanmashine's picture

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

vedro-compota's picture

да ) но заметьте - выше и не говорится. что алгоритмическая декомпозиция используется в ООП - а точнее при ООАП

Алгоритмическая декомпозиция используется при функциональном подходе.

_____________
матфак вгу и остальная классика =)

humanmashine's picture

Полностью соглашусь, но в функциональном программировании нет классов))) По крайней мере то что там иногда называется классами - это не совсем классы. Но это не та тема которую надо долго обсуждать.

vedro-compota's picture

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

_____________
матфак вгу и остальная классика =)

humanmashine's picture

Ладно - сдаюсь, так как уже совсем потерял нить обсуждения))))