Цель C Категория против открытого / закрытого принципа - PullRequest
2 голосов
/ 21 апреля 2011

По принципу Открыто / Закрыто

.,,программные объекты (классы, модули, функции и т. д.) должны быть открыты для расширения, но закрыты для модификации

Поэтому можно сказать, что Категория является серьезным нарушениемпринцип

Ответы [ 2 ]

3 голосов
/ 22 апреля 2011

Я думаю, что стандартная интерпретация «закрыт для модификации» означает «добавление новых функций не требует модификации существующего кода».Используя эту интерпретацию, категории не нарушают открытый / закрытый принцип, потому что написание новых методов категории не означает изменение существующего кода.

Что касается особого случая, когда методы категории могут заменить существующие методы в классе, этоне может нарушать принцип Open / Closed, но его осуждают, потому что он опасен.Это одна из тех , «возможно сделать это, но не делать» возможностей языка.

3 голосов
/ 21 апреля 2011

Не понимаю как. Категории позволяют добавлять функциональность, которая зависит от существующего интерфейса. Они не позволяют вам вносить какие-либо реальные изменения в исходный класс, они просто предоставляют некоторый синтаксический сахар, который создает иллюзию того, что в класс были добавлены новые методы.

Другими словами, категории помогают вам расширить класс. Они не модифицируют это. Похоже, они усиливают принцип открытия / закрытия.

...