|
|
|
Ставлю под сомнение полезность private, public и protected
|
|||
|---|---|---|---|
|
#18+
авторбреда смешного это словосочетание и подразумевало брехню ------------------------------------------ жизнь как пестня ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2006, 16:00 |
|
||
|
Ставлю под сомнение полезность private, public и protected
|
|||
|---|---|---|---|
|
#18+
Fabrichenko Viktorвот начитаются такого бреда смешного и думают что самые умные :-))) http://www.computer-science.ru/docs/comp/rus/develop/other/stroustrup_interview/ ---------------------------------------- жизнь как пестня Я этого не читал. Это шутка? tchingizставь везде и всегда public и будет все хорошо. в смысле не вижу большой нужды от приватов и протектед. Самое смешное, что я с тобой не согласен. Если язык не предоставляет более качественные и гибкие средства инкапсуляции, то надо пользоваться теми что есть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2006, 16:07 |
|
||
|
Ставлю под сомнение полезность private, public и protected
|
|||
|---|---|---|---|
|
#18+
SarinДа. Интерпретатор. Мне тоже долго не нравился такой подход. Коробило отсутствие private, public и protected. Вопрос не в этом. Меня коробит от "есть специальный метод с предопределенным именем". SarinНо вот код на питоне: Лучше ли он? Уж и не знаю. Мне кажется да. Лично меня в первую очередь ужасает его производительность. SarinНапример представте себе ситауацию, что в данном примерепридётся ввести ещё одну переменную с такими же ограничениями. Я добывлю строчку. А вы сколько?:) Если захочу идти этим путем, столько же. Неужели Вы полагаете, что Код: plaintext чем-то отличается от Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2006, 19:54 |
|
||
|
Ставлю под сомнение полезность private, public и protected
|
|||
|---|---|---|---|
|
#18+
softwarer SarinНо вот код на питоне: Лучше ли он? Уж и не знаю. Мне кажется да. Лично меня в первую очередь ужасает его производительность. Производительность питона сопоставима с явой. http://www.twistedmatrix.com/~glyph/rant/python-vs-java.html Вобщем-то ява чуток побыстрее в среднем. Следует отметить тот факт что аффтары питона занялись оптимизацией не так давно. И добились выдающихся успехов. Кстати интересны и тексты тестов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2006, 21:06 |
|
||
|
Ставлю под сомнение полезность private, public и protected
|
|||
|---|---|---|---|
|
#18+
Sarin softwarer SarinНо вот код на питоне: Лучше ли он? Уж и не знаю. Мне кажется да. Лично меня в первую очередь ужасает его производительность. Производительность питона сопоставима с явой. http://www.twistedmatrix.com/~glyph/rant/python-vs-java.html ... Тест старый какой то :-) Again, I must stress that these are approximate times, which are specific to my computer, my Java version (JDK 1.1.7B, blackdown) , my operating system (Debian GNU Linux 2.2), my python version (Python 1.5.2) and my idiosyncratic test method, which is not strenuous at all. I repeated the tests 3 times and averaged the results to get the numbers you see here. Sources to the tests are available here in .tar.gz format, so you can perform them yourself. Many Java fans out there are probably asking "why did you choose JDK 1.1?". I know that 1.2 may perform better than this, and I am aware that I did not choose optimal (or even necessarily equivalent) algorithms for the Java test cases. This test is centered around implementing/deploying actual applications. JDK 1.2 is not available on most platforms yet (when I say "most", I'm talking about MacOS, BeOS, OS/2, and friends. With the recent resurgence of the Mac's popularity w/ the iMac, this is especially relevant). Those platforms that ship with Java have a 1.1 implementation, and those platforms that ship with Python have 1.5.2. Last modified: Fri Apr 7 14:28:25 EST 2000 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2006, 21:36 |
|
||
|
Ставлю под сомнение полезность private, public и protected
|
|||
|---|---|---|---|
|
#18+
иногда хочется не перекрыть, а тупо вызвать protected метод... а то мли в каком-то DevEx метод определения высоты строки (кажись) - protected, и значитца чтобы таки эту высоты посчитать - пиши давай, по образу и подобию (благо сорцы под руками). Дык эта падла ж считает данные на основании опять-таки protected свойств! туды его в качель.... -- ------------------------- There's no silver bullet! Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2006, 21:37 |
|
||
|
Ставлю под сомнение полезность private, public и protected
|
|||
|---|---|---|---|
|
#18+
Sarin softwarer SarinНо вот код на питоне: Лучше ли он? Уж и не знаю. Мне кажется да. Лично меня в первую очередь ужасает его производительность. Производительность питона сопоставима с явой. http://www.twistedmatrix.com/~glyph/rant/python-vs-java.html Вобщем-то ява чуток побыстрее в среднем. Следует отметить тот факт что аффтары питона занялись оптимизацией не так давно. И добились выдающихся успехов. Кстати интересны и тексты тестов. Непонятна методология сравнения. Хеши в питоне - это атомарные сущности, а Hashtable - обычный класс целиком написанный на Java. Следовательно, сравнивается клей для связки модулей написанных на С и код целиком выполняющийся c помошью JVM. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2006, 23:57 |
|
||
|
Ставлю под сомнение полезность private, public и protected
|
|||
|---|---|---|---|
|
#18+
SarinПроизводительность питона сопоставима с явой. В первую очередь я бы не стал называть Яву образцом производительности, хотя это вопрос в основном к ее библиотекам. Более существенно же - это не значит, что плохая программа на Питоне будет быстро работать. Полагаю, я показал Вам, что такой подход легко реализуется на дельфе. Также нет проблем сделать на плюсах, переопределив оператор []. На яве - можно, но может быть не так синтаксически просто. И, полагаю, Вы понимаете, почему этот подход будет заведомо медленнее простого геттера-сеттера. Преимуществ в этом подходе я по-прежнему не вижу - чистой воды изобретение велосипеда. Там, где нужны индексированные свойства, их можно и нужно применять. Там, где нужны уникальные - применяем их. Там, где нужны private, применяем их, не притягивая за уши индексированные свойства. Имхо так. А вот теперь - раз уж Вы подняли эту тему - мне хотелось бы увидеть пример, как в этой технологии будет выглядеть работа с реальными свойствами. Например, следующий простой набор: Код: plaintext 1. 2. 3. Дополнительно: при изменении Min/Max/Width следует проверить условие для Pos, и если оно перестало выполняться, увеличить либо уменьшить Pos так, чтобы попасть в допустимый диапазон. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.04.2006, 01:51 |
|
||
|
Ставлю под сомнение полезность private, public и protected
|
|||
|---|---|---|---|
|
#18+
lockyиногда хочется не перекрыть, а тупо вызвать protected метод... А какие проблемы-то? Вот с private - не пройдет. Но нормальные люди в private упаковывают то, что действительно лучше не показывать наружу. Я безусловно согласен с тем, что в расстановке видимости элементов класса нужна большая продуманность, и реальные реализации часто недостаточно хороши. Поэтому я давно уже отказался от мысли брать библиотеки без исходников. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.04.2006, 01:54 |
|
||
|
Ставлю под сомнение полезность private, public и protected
|
|||
|---|---|---|---|
|
#18+
softwarer wrote: > locky > иногда хочется не перекрыть, а тупо вызвать protected метод... > > > А какие проблемы-то? Вот с private - не пройдет. Но нормальные люди в > private упаковывают то, что действительно лучше не показывать наружу. > Сорри, очепятался, вечер... ессно private... с protected всё значительно проще :-) -- ------------------------- There's no silver bullet! Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.04.2006, 11:34 |
|
||
|
Ставлю под сомнение полезность private, public и protected
|
|||
|---|---|---|---|
|
#18+
SarinЯ не проив ОО. И не против инкапсуляции. Я говорю о том, что есть подход лучше нынешнего. КАкой? Делать проверки видимости в Runtime вручную? И чем же это лучше нынешнего? Тем, что можно что-то там не цензурное с клавиатурой делать (с)Sarin чаще? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.04.2006, 15:20 |
|
||
|
Ставлю под сомнение полезность private, public и protected
|
|||
|---|---|---|---|
|
#18+
таки да, как связаны ппп с ооп? Что мешает вообразить класс ящичком и юзать интерфейсы без всяких приватов? А то блин дурак какой-нибудь в майкрософте расставит их криво, потом прыгай с лишними классами, интерфейсами, наследованиями, переопределениями. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.04.2006, 17:50 |
|
||
|
Ставлю под сомнение полезность private, public и protected
|
|||
|---|---|---|---|
|
#18+
Правильно, ни на фиг это не надо все. Надо как в Smalltalk, все данные -- только private. И все, стоять по стойке смирно и без разговоров !! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.04.2006, 11:04 |
|
||
|
Ставлю под сомнение полезность private, public и protected
|
|||
|---|---|---|---|
|
#18+
yamapikaryaтаки да, как связаны ппп с ооп? Зачем нужно ООП? - увеличить устойчивость кода к изменениям в требованиях. Достигается за счёт замены функциональной декомпозиции на декомпозицию данных (данные изменяются в существенно меньшей степени, чем поведение) - обеспечить возможность повтроного использования кода. Ранее для этого использовались концепции модуля и абстрактного типа данных. ООП вобрало в себя обе эти концепции. Полиморфизм времени исполнения, сокрытие деталей реализации (принцип открыт-закрыт), различные формы наследования (реализации, интерфейсов, одиночное, множественное, ковариантность, универсализация) - это механизмы обобщающие вышеобозначенные концепции. - устранить разрыв между абстракциями уровня проектирования и реализации. Возвращаясь на землю. разбиение классов на пакеты + ппп = одна из реализаций механизма инкапсуляции, именно так эти понятия и связаны. Что мешает вообразить класс ящичком и юзать интерфейсы без всяких приватов? А что мешает вообразить себя самолётом, залесть на табуретку, расставить руки и начать жужжать? Проблема одна называется высокое связывание (high coupling). Редкий класс не содержит в себе данных, имеющих смысл только с точки зрения реалиазации возложенных на него задач. Позволяя кому-либо получить доступ к этим данным, мы жестко связываем интерфейс класса и то, как он реализуется. Это страшно если - мы публикуем свои решения (н-р, пишем библиотеки) - велика вероятность изменения способа реализации (ранняя стадия написания кода, поддержка, протребности рынка (н-р, частая смена тарифов)) Не страшно если - код пишется для очень плохих людей А то блин дурак какой-нибудь в майкрософте расставит их криво, потом прыгай с лишними классами, интерфейсами, наследованиями, переопределениями. Ууу... А представляешь, что может сделать дурак, без приватов?! Кстати, в java доступ к private полям на случай _очень-очень надо и больше так никогда не буду делать_ есть. Через рефлекшин можно делать с классами, что хочешь. Остаётся верить, что пока дурак научится, как это сделать, он может быть успеет поумнеть :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.04.2006, 13:57 |
|
||
|
Ставлю под сомнение полезность private, public и protected
|
|||
|---|---|---|---|
|
#18+
SarinИнкапсуляция - очень хорошо! Но, во-первых, не кажется ли вам, что лучше было ограничится, например, предупреждениями компиляции, а не ошибками. И, во-вторых, не кажится ли вам, что, например, подход питона практичней и универсальней? Вопрос к автору. Вы можете привести примеры больших проектов, разработанных с применением Python? Есть-ли информация об их успешном внедрении? P.S. Прошу прощения за то, что поздно появился в топике. P.P.S. О питоне слыхал... краем уха. Не юзал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2006, 00:32 |
|
||
|
Ставлю под сомнение полезность private, public и protected
|
|||
|---|---|---|---|
|
#18+
NotGonnaGetUsПозволяя кому-либо получить доступ к этим данным, мы жестко связываем интерфейс класса и то, как он реализуется. Хм. При том, что я согласен с Вами, это не есть хороший ответ на заданный вопрос. Практически Вы, как в известном анекдоте говорите: "..чем армян". Sarin говорит следующее: а давайте уберем создаваемый компилятором забор и вместо этого все будем умными и сознательными людьми; если рядом с полем-методом стоит комментарий "внутреннее. не трогать", то будем пользоваться им только в самом крайнем случае. Да, сугубо теоретически можно так работать - примерно так же теоретически возможно построить коммунизм. Проблема в обоих случаях одна и та же: реально существующие люди не готовы пользоваться этим подходом так, чтобы его достоинства перевешивали его недостатки. Если очень грубо, то все сводится к примерно следующему: кто больший дурак, разработчик некоего кода (API, библиотеки итп) или прикладник, которому требуется им пользоваться. Бывает и так, и этак, но все-таки чаще второе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2006, 10:19 |
|
||
|
Ставлю под сомнение полезность private, public и protected
|
|||
|---|---|---|---|
|
#18+
почти идеальная модель в клиппере: public static private local не хватает только global ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2006, 10:30 |
|
||
|
Ставлю под сомнение полезность private, public и protected
|
|||
|---|---|---|---|
|
#18+
mayton SarinИнкапсуляция - очень хорошо! Но, во-первых, не кажется ли вам, что лучше было ограничится, например, предупреждениями компиляции, а не ошибками. И, во-вторых, не кажится ли вам, что, например, подход питона практичней и универсальней? Вопрос к автору. Вы можете привести примеры больших проектов, разработанных с применением Python? Есть-ли информация об их успешном внедрении? P.S. Прошу прощения за то, что поздно появился в топике. P.P.S. О питоне слыхал... краем уха. Не юзал. слышал, что гугл его активно использует. тынц1 тынц2 подтверждение ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2006, 10:34 |
|
||
|
Ставлю под сомнение полезность private, public и protected
|
|||
|---|---|---|---|
|
#18+
По первой ссылке я нашел краткую аннотацию по Питону Python is a dynamic object-oriented programming language that can be used for many kinds of software development. It offers strong support for integration with other languages and tools, comes with extensive standard libraries, and can be learned in a few days. Many Python programmers report substantial productivity gains and feel the language encourages the development of higher quality, more maintainable code. Python runs on Windows, Linux/Unix, Mac OS X, OS/2, Amiga, Palm Handhelds, and Nokia mobile phones. Python has also been ported to the Java and .NET virtual machines. Python is distributed under an OSI-approved open source license that makes it free to use, even for commercial products. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2006, 17:00 |
|
||
|
Ставлю под сомнение полезность private, public и protected
|
|||
|---|---|---|---|
|
#18+
mayton Вы можете привести примеры больших проектов, разработанных с применением Python? Питон активно используется гуглем, НАСА и много где ещё. Большие проекты: для затравки Zope и Plone. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.04.2006, 00:23 |
|
||
|
Ставлю под сомнение полезность private, public и protected
|
|||
|---|---|---|---|
|
#18+
softwarer NotGonnaGetUsПозволяя кому-либо получить доступ к этим данным, мы жестко связываем интерфейс класса и то, как он реализуется. Хм. При том, что я согласен с Вами, это не есть хороший ответ на заданный вопрос. Я отвечал yamapikarya'ку о связи ппп с ооп. Sarin говорит... Да, сугубо теоретически можно так работать - примерно так же теоретически возможно построить коммунизм. А если отвечать ему... Sarin отчасти прав, говоря, что полезность ппп сомнительна. Прав постольку, поскольку набора "ппп" не достаточно для того, чтобы обеспечить закрытость класса _для использования_ и открытость _для расширения_. Всё равно остаётся необходимость различать "открытые и публикуемые методы" (с) Фаулер. Взять, н-р, паттерн стартегия. Классу стратегии требуется полный доступ к компонентам класса, который она обслуживает. Этого можно добиться если а) объявлять все стратегии внутри класса (в java это inner class) б) выставить из класса на ружу геттеры и сеттеры к закрытым полям. Первое решение плохо тем, что расширить класс новой стратегией будет нельзя. Второе - инкапсуляция для данного класса уже не поддерживается языком, т.к. мы явно открыли детали реализации. В итоге приходится быть "умным" и не делать того, чего нельзя, даже если это явно не запрещено. Тем не менее использование ппп - повышает "дуракоусточивость" (если есть возможность сделать глупость, ей обязательно кто-нибудь воспользуется, а "нет лопаты - нет проблем"). - позволяет ограничить видимость компонент класса (если поле класса может изменить кто угодно, какую я могу дать гарантию, что инвариант класса не нарушится? мне придётся постоянно его проверять (как предлагает делать Sarin), а это вычислительный overhead + огромное пространство для runtime ошибок) Т.к. альтернтива питона не даст мне лучшего, чем ппп, то для меня она не альтернатива. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.04.2006, 12:06 |
|
||
|
Ставлю под сомнение полезность private, public и protected
|
|||
|---|---|---|---|
|
#18+
NotGonnaGetUs Всё равно остаётся необходимость различать "открытые и публикуемые методы" Не соглашусь. Отметим, что это вопрос вкусов, неформализуемый. Такая "необходимость различать" очень похожа на оправдание дружественности (которая имхо не нужна). Это желание имхо возникает при черезчур мелком разбиении на классы; если "один правильный класс" разбивать на несколько взаимодействующих мелких, придется выносить в паблик то, что хотелось бы оставить в привате. NotGonnaGetUs(с) Фаулер. Взять, н-р, паттерн стартегия. Классу стратегии требуется полный доступ к компонентам класса, который она обслуживает. Хм. Почему это? Ему требуется доступ к интерфейсу класса, если я правильно помню этот паттерн. Поясните? NotGonnaGetUsТ.к. альтернтива питона не даст мне лучшего, чем ппп, то для меня она не альтернатива. Тут полностью согласен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2006, 18:05 |
|
||
|
Ставлю под сомнение полезность private, public и protected
|
|||
|---|---|---|---|
|
#18+
softwarerЭто желание имхо возникает при черезчур мелком разбиении на классы; если "один правильный класс" разбивать на несколько взаимодействующих мелких, придется выносить в паблик то, что хотелось бы оставить в привате. Согласитесь, тут есть некий парадокс: чем мельче кубики, тем легче их повторно использоваь, но при этом появляется и больше способов как их использовать не правильно. В итоге, создавая "один правильный класс" мы решаем задачу о сокрытии реализации и отказываемся от написания повторно используемых компонентов. А вот чтобы "и овцы целы, и волки сыты"... Интересным примером являются базы данных. В схеме определяются сущности, которым всё друг о друге известно, что позволяет строить какие угодно дикие select'ы и update'ы. И при этом никто не плачет и не жалуется, что инкапсуляции нет - все живы и здоровы. И всё-таки есть объективные ситуации, когда ппп не хватает. Если говорить о java, то помимо public и private, есть модификаторы protected (пакет + наследники) и default (пакет). Если требуется открыть доступ только наследникам класса, что вполне "правильное"(?) желание, то сделать этого не получится. Придётся открыться всему пакету. Другой пример. Был класс TextContainer. Он содержал методы insert(), delete(), и т.п. Возникла необходимость эффективно реализовать операции undo/redo (прежде эти операции выполялись посредством клонирования всего Text'a). Как быть? Используем command паттрен. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. Public? Нельзя, т.к. если его просто так дёрнуть, то операция undo "поломается". Private? Значит классы команд должны быть реализованы внутри класса TextContainer. Считать ли это "концом света" ? - В данном конкретном случае нет, но душок остаётся. softwarer NotGonnaGetUsВзять, н-р, паттерн стартегия. Классу стратегии требуется полный доступ к компонентам класса, который она обслуживает. Хм. Почему это? Ему требуется доступ к интерфейсу класса, если я правильно помню этот паттерн. Поясните? Классу стратегии не "требуется" доступ к интерфейсу, он только к интерфейсу и имеет доступ (т.е. к открытым компонентам класса). Соответственно, если не прибегать к созданию _объекта посредника_ для передачи закрытых данных, то все необходимые компоненты класса должны быть открыты. Как и большинство паттернов, паттерн стратегия приводит к созданию синтетических объектов. Они не отражают модель предметной области, а представляет способ, которым мы решаем сугубо технические задачи. Н-р, стратегия это просто способ организовать "переключение" между различными вариантами поведения. Класс (контекст) для которого создаются стратегии и стратегии на самом деле "один правильный класс", поэтому реализация стратегии может быть завязана на реализацию класса. И хотя это можно было бы назвать вопиющим нарушением всех основ ООП, мы называем это другими словами, потому что _знаем_ и _следуем_ правилам работы с такими синтетическими конструкциями. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2006, 18:29 |
|
||
|
Ставлю под сомнение полезность private, public и protected
|
|||
|---|---|---|---|
|
#18+
NotGonnaGetUsСогласитесь, тут есть некий парадокс: чем мельче кубики, тем легче их повторно использоваь, Не соглашусь. С одной стороны, легче использовать каждый конкретный кубик, с другой стороны время решения задачи (aka построения дома) при черезчур мелких кубиках стремительно растет. Именно поэтому необходимо искать некий наиболее удачный промежуточный размер. NotGonnaGetUsно при этом появляется и больше способов как их использовать не правильно. Хм. "Использовать кубик неправильно" - имхо несколько бессмысленное словосочетание, приобретающее смысл только в неправильных кубиках. Если помните, некоторое время назад в теме про exception-ы наш собеседник говорил о "неправильном порядке вызова методов", в то время как я ругал такой подход кривой реализацией. Это другая грань той же проблемы; правильный кубик, используя в соответствии с публикуемым им интерфейсом, просто невозможно использовать "неправильно". Мало того, в правильном кубике вообще говоря стоит минимизировать предположения о том, как он будет использоваться - иначе кубик получится неуниверсальным. Допустим, кирпич. Его интерфейс - это габариты, прочность и прочее. И хотя Вы можете полагать, что из него правильно складывать дома, на самом деле его ничуть не хуже можно использовать как гнет для квашенья капусты. Потому что это правильный кубик :) NotGonnaGetUsВ итоге, создавая "один правильный класс" мы решаем задачу о сокрытии реализации и отказываемся от написания повторно используемых компонентов. Имхо это чрезмерное преувеличение. Скажу так: меня иногда упрекали в стремлении к излишне универсальным решениям, насколько я помню никогда не упрекали в излишне частных решениях, и тем не менее я не могу вспомнить ни одного случая, когда вынужден был бы раскрыть доступ к элементу класса сверх желаемого мной. NotGonnaGetUsИнтересным примером являются базы данных. В схеме определяются сущности, которым всё друг о друге известно, что позволяет строить какие угодно дикие select'ы и update'ы. И при этом никто не плачет и не жалуется, что инкапсуляции нет - все живы и здоровы. Я бы не сказал, что Вы правы :) В БД используются подходящие для этой задачи формы инкапсуляции; наиболее существенно то, что схема сама по себе является синглтоном, обладающим вполне определенным интерфейсом (и определенными скрываемыми деталями реализации). По сравнению с "классическим ООП" введено интересное понятие "роль" - по сути, разным пользователям предоставляются разные интерфейсы к одному и тому же объекту. Кроме того, существует определенная иерархия инкапсуляции внутри объекта-схемы - скажем, таблица предоставляет свой интерфейс (поля, методы для запроса-изменения), но скрывает детали реализации (индексы, ограничения). Наконец, существует естественный уровень абстрагирования, интерфейсы "по имени" - скажем, я в любой момент могу переименовать таблицу, создать view с тем же именем, и все ранее табличные операции будут работать с этим view. Ну, пакеты предоставляют просто-таки классическую инкапсуляцию (и без них программировать уже.. очень тоскливо). NotGonnaGetUsИ всё-таки есть объективные ситуации, когда ппп не хватает. Безусловно, расширять в принципе можно до бесконечности. Это опять-таки задача поиска оптимума. NotGonnaGetUsЕсли говорить о java, то помимо public и private, есть модификаторы protected (пакет + наследники) и default (пакет). Если требуется открыть доступ только наследникам класса, что вполне "правильное"(?) желание, то сделать этого не получится. Придётся открыться всему пакету. Ну, это всего лишь дружественность, которую, с моей точки зрения, стоило бы выбросить и из дельфы, и из явы, и из плюсов. В яве, если мне не изменяет память, неприятно еще и отсутствие "наследования" пакетов. Если я решил взять пакет X.Y.Z и отрефакторить его на X.Y.Z.T1, X.Y.Z.T2 и X.Y.Z.T3, это запросто приведет к вороху ошибок недоступности. NotGonnaGetUsДругой пример. Хм. А зачем делать именно так? Я бы сказал, "метод insert переименовываем в _insert" - звучит чертовски необъектно, не находите? Как это делать - на самом деле тема для отдельного нетривиального обсуждения. Позволю себе указать на то, что проблема в Вашем случае возникает из-за одного несоответствия: Вы хотите сделать команду (операцию редактирования) членом класса, методом, а вот в реализации отката применить нечто внешнее. Как одна из возможных реализаций (с Вашего разрешения, я не буду добавлять проверок на null и прочий необходимый мусор): Код: 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. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. Вроде бы многовато получилось :) Но - если нигде не ошибся в набранном прямо в форуме - корректное расширяемое взаимодействие. И обращаю внимание - это не единственный вариант; только "наиболее идеологично-паттерновый", который пришел мне в голову. NotGonnaGetUsКлассу стратегии не "требуется" доступ к интерфейсу, он только к интерфейсу и имеет доступ (т.е. к открытым компонентам класса). Соответственно, если не прибегать к созданию _объекта посредника_ для передачи закрытых данных, то все необходимые компоненты класса должны быть открыты. Я не понимаю, зачем здесь нужно "передачи закрытых данных". Вся суть этого паттерна - я бы его скорее назвал "Алгоритм" - в абстрагировании от закрытых данных обрабатываемого объекта. NotGonnaGetUsКласс (контекст) для которого создаются стратегии и стратегии на самом деле "один правильный класс", Не согласен. Например, можно сделать класс "алгоритм сортировки", работающий с интерфейсом типа [getCount();compare(int,int)]. И после этого можно сделать стратегию "Сортировка", параметризуемую алгоритмом и коллекцией Comparable объектов. Решительно не вижу, где здесь "один правильный класс" из объединения этих объектов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2006, 20:03 |
|
||
|
Ставлю под сомнение полезность private, public и protected
|
|||
|---|---|---|---|
|
#18+
про кирпич, имхо подразумевалось следующее: если строишь дом из кирпичей, то их можно ложить друг на друга, а можно по спирали (в этом случае всё развалится), а если ты строишь панельный дом, вероятность напортачить снижается. кстати, интересная штука с протектедом. Вот, скажем, определяем мы метод протектедом. Другой прогер берёт, наследует наш класс и зеркалит протектед методы с свои паблик. Просто тупо зеркалит. И смысл тогда в протектеде? ------------------ - А как в Интеpнете pаботать? - Сначала нужно узнать, что вам нужно rtfm ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2006, 22:01 |
|
||
|
|

start [/forum/topic.php?fid=16&msg=33672253&tid=1345367]: |
0ms |
get settings: |
5ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
137ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
39ms |
get tp. blocked users: |
1ms |
| others: | 191ms |
| total: | 395ms |

| 0 / 0 |
