Мой вопрос касается, в частности, Java, абстрактных классов и использования защищенных данных.Мне говорят, что все данные должны быть частными, и используются только защищенные методы получения / установки.
Теперь я понимаю, что мы хотим оградить данные от прямого манипулирования случайными пользователями класса и что открытые члены данныхв целом это сомнительная практика.Я посмотрел на «Защищенные поля Java против общедоступных получателей» ( Защищенные поля Java против общедоступных получателей ), но я все еще сомневаюсь, что:
protected int i;
хуже в абстрактном классе, чем:
private int i;
protected int geti();
protected void seti(int j);
Я просто не вижу обратной стороны, когда абстрактный класс существует именно для предоставления родительских / общих возможностей дочерним классам, а защищенная область предназначена для предоставления доступа детям, одновременно защищаяданные от случайных пользователей.Я отмечаю в вышеупомянутом вопросе, что большинство ответов, похоже, касаются вопроса о том, почему данные в целом должны быть частными, а не общедоступными.Я пытаюсь сосредоточить свой вопрос конкретно на данных, существующих в абстрактном родителе, предназначенном для использования детьми.Единственный разумный комментарий, который я слышал на сегодняшний день, заключается в том, что использование защищенных родителями данных (например, int i выше) оставляет вас с кодом в дочернем классе, который ссылается на переменную, не объявленную в дочернем классе.Менее убедительным является аргумент (см. Общий защищенный элемент данных в базовом классе? ), что вы можете захотеть изменить доступ однажды, и теперь вы должны соблюдать свой интерфейс.Это абстрактный класс, предназначенный для расширения в 100% случаев.
Спасибо!Определенные ссылки на книги / заголовки # страниц гораздо более полезны, чем ссылки на "... любой базовый текст программирования на Java ..." *
========================================= 10-13-2010
Это был такой же вопрос об абстрактных классах, как и об защищенных данных.Меня разочаровывает, что в ответах акцент сместился на то, является ли сокрытие данных хорошей вещью в ООП (ответ: да).Здесь много глубины, затрагивающей природу абстрактного класса, и как он отличается от обычного не финального класса, и какие возможные преимущества могут быть для исправления имен и типов элементов данных в абстрактном родительском элементе для использованиядетские классы.Я думаю, что здесь есть возможность для инноваций и большего контроля, распространяющегося от абстрактного родителя к реализующим дочерним классам.Я обеспокоен тем, что общие принципы, такие как преимущества сокрытия данных, могут стать догмой и препятствовать инновациям и разработке новых моделей и идей.
Спасибо всем, кто внес свой вклад.