Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Инкапсуляция

87
27 января 2011 года
Kogrom
2.7K / / 02.02.2008
Уже обсуждали циклы, шаблоны. Возможно, кому-то будет интересна тема инкапсуляции. Тут я буду говорить именно о той, которая определяется синтаксисом, ключевыми словами типа private, protected и т.п. Кто что про неё думает? Нужна ли она вообще?

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

Но и с данными должна быть некая условная инкапсуляция. То есть должен быть не полный запрет, а генерирование предупреждений компилятором (интерпретатором) в случае их использования. Такой подход может пригодиться при рефакторингах.
Страницы:
5
08 февраля 2011 года
hardcase
4.5K / / 09.08.2005
Цитата: Kogrom
Можно почитать книгу Гради Буча "Объектно-ориентированный анализ и проектирование".

Не читал Буча (и в ближайшее время точно не буду) - мне просто не интересен ОО-анализ и проектирование :)

Цитата: Kogrom
Там он рассуждает о сложности, о возможности человека воспринимать сложные системы.

Для меня все те поля класса - единая структурная единица.


Цитата: Kogrom
Сложные системы трудно понимать, трудно поддерживать. Поэтому достаточно сильно развита наука по управлению сложностью.

Это что за наука такая?

Цитата: Kogrom
Книжка, пример из которой я привёл в этой теме, освещает приёмы по снижению сложности.

Ликвидация private-методов это понижение сложности?

87
08 февраля 2011 года
Kogrom
2.7K / / 02.02.2008
Цитата: hardcase
Для меня все те поля класса - единая структурная единица.


Да, я это заметил.

Цитата: hardcase
Это что за наука такая?


Наука по управлению сложностью же :)
Хоть Макконнелла читай, хоть Буча, хоть Фаулера - все о ней говорят.
Смотри декомпозицию, рефакторинг и т.п.

Цитата: hardcase
Ликвидация private-методов это понижение сложности?


Это смотря как ликвидировать.

5
08 февраля 2011 года
hardcase
4.5K / / 09.08.2005
Цитата: Kogrom
Наука по управлению сложностью же :)


То что ты назвал - это не наука.

Цитата: Kogrom
Хоть Макконнелла читай, хоть Буча, хоть Фаулера - все о ней говорят.
Смотри декомпозицию, рефакторинг и т.п.

Да хоть IT. ;)
Вот я и вижу, начитавшегося одного :D

87
08 февраля 2011 года
Kogrom
2.7K / / 02.02.2008
Цитата: hardcase
То что ты назвал - это не наука.


Тебе виднее.

Цитата: hardcase
Вот я и вижу, начитавшегося одного :D


Да, я помню: теоретик и блаб-программист. Теперь ещё и начитавшийся.

297
08 февраля 2011 года
koodeer
1.2K / / 02.05.2009
Цитата: Kogrom
Это догма. Точнее догма, что такая инкапсуляция - это хорошо. Противоречит идеологии Open Source, например.


Как инкапсуляция противоречит Open Source?
Неужто код с приватными методами нельзя сделать свободным? Неужто код со всеми публичными методами нельзя сделать проприетарным и не давать исходники никому?

Цитата: Kogrom
И Алан Кей, создавая Smalltalk, тоже впал в крайность, сделав все методы открытыми, а данные закрытыми.


Да, чувак ошибся, сделав все методы открытыми. Ты этого не допускаешь?
Если верить Википедии, то именно в сообществе Smalltalk появилась идея рефакторинга. Вероятно потому и появилась, что часто приходилось воевать с недостатками открытых методов.
Ты прекрасно знаешь, когда появился Смолток. Одним словом - давно. Тогда ещё не была осознана необходимость инкапсуляции. Сдаётся мне, сейчас Кей спроектировал бы язык по-другому.

Цитата: Kogrom
Можно почитать книгу Гради Буча "Объектно-ориентированный анализ и проектирование". Там он рассуждает о сложности, о возможности человека воспринимать сложные системы. Например, он пишет:

Но моё мнение, что 7 - это многовато, это уже сложно для понимания.

Сложные системы трудно понимать, трудно поддерживать. Поэтому достаточно сильно развита наука по управлению сложностью. Книжка, пример из которой я привёл в этой теме, освещает приёмы по снижению сложности.


Ну? Представь: был один класс с одним открытым методом, и одним закрытым. Ты сделал взамен два класса, каждый с одним открытым методом. Количество классов удвоилось, количество видимых методов удвоилось - система стала сложнее, её стало сложнее понимать.


И вообще, в начале этой темы речь шла о том, что открытые методы якобы упрощают тестирование. Потом внезапно оказалось, что рефакторинг рулит. Где связь?

63
08 февраля 2011 года
Zorkus
2.6K / / 04.11.2006
Ну давайте и я буду забрасывать собеседников гов^W цитатами авторитетов :)
[QUOTE=Linus Torvalds]Theory and practice sometimes clash. And when that happens, theory loses. Every single time.[/QUOTE]

[QUOTE=Eric S. Raymond]Computer science education cannot make anybody an expert programmer any more than studying brushes and pigment can make somebody an expert painter.[/QUOTE]

[QUOTE=Linus Torvalds]Talk is cheap. Show me the code.[/QUOTE]

[QUOTE=Yoggi Berra]In theory, theory and practice are the same. In practice, they’re not.[/QUOTE]

[QUOTE=George Carrette]First learn computer science and all the theory. Next develop a programming style. Then forget all that and just hack.[/QUOTE]

Взято отсюда: http://www.junauza.com/2010/12/top-50-programming-quotes-of-all-time.html
3
09 февраля 2011 года
Green
4.8K / / 20.01.2000
Ок, это уже переливание из пустого в порожнее.
Бездоказательно, безосновательно, безпримерно и совершенно ненужно...

Все что я хотел сказать я сказал, убеждать кого-либо не собираюсь.
Пойду напишу парочку приватных методов... :D

Удачи!

P.S. В завершении диалога совет: попробуй свою теорию на практике. Только честно, без отступлений в сторону, на реальных проектах, не в одноразовом коде и не отступай от этой практики некоторое продолжительное время, например, полгодика.
87
09 февраля 2011 года
Kogrom
2.7K / / 02.02.2008
Цитата: koodeer
Как инкапсуляция противоречит Open Source?


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

На остальные вопросы нет смысла отвечать.

Цитата: Green
Ок, это уже переливание из пустого в порожнее.


Честно говоря, я тут использовал принцип: "Объяснял, объяснял, уже и сам понял...". Действительно, отрицательная обратная связь себя тут исчерпала.

297
10 февраля 2011 года
koodeer
1.2K / / 02.05.2009
Kogrom, так ты пришёл к какому-то определённому выводу?
Или пока ещё в поисках?
87
10 февраля 2011 года
Kogrom
2.7K / / 02.02.2008
Цитата: koodeer
Kogrom, так ты пришёл к какому-то определённому выводу?
Или пока ещё в поисках?


В поисках.
У меня есть выводы, есть вопросы. Кроме тех выводов, что я уже озвучивал, могу и другие озвучить для смеха:

1. В беге на короткие, средние и длинные дистанции требуются разные скорости, разные техники, стратегии.
2. Гибриды иногда лучше родителей, иногда хуже.
3. Надо больше времени выделить на изучение английского языка.
4. Дурные привычки сильнее хорошего довода их бросить.
5. Некоторые программисты вместо книг Герба Саттера используют баш.орг.ру. Шучу.

Вопросы:

1. Что такое модули-мутанты? В чём преимущества и недостатки?
2. Что такое синглтон: класс или модуль?
3. Куда делся Der Meister?

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог