Основы программирования на C++, PASCAL
Применяя инкапсуляцию, мы защищаем данные, принадлежащие объекту, от возможных ошибок, которые могут возникнуть при прямом доступе к этим данным. Кроме того, применение указанного принципа очень часто помогает локализовать возможные ошибки в коде программы. А это намного упрощает процесс поиска и исправления этих ошибок. Можно сказать, что инкапсуляция обеспечивает сокрытие данных, что позволяет защитить эти данные. Однако применение инкапсуляции ведет к снижению эффективности доступа к элементам объекта. Это обусловлено необходимостью вызова методов для изменения внутренних элементов (переменных) объекта. Но при современном уровне развития вычислительной техники подобные потери в эффективности не играют существенной роли.
Наследование — это процесс, посредством которого один объект может наследовать свойства другого объекта и добавлять к ним черты, характерные только для него. В итоге создается иерархия объектных типов, где поля данных и методов «предков» автоматически являются и полями данных и методов «потомков».
Смысл и универсальность наследования заключаются в том, что не надо каждый раз заново («с нуля») описывать новый объект, а можно указать «родителя» (базовый класс) и описать отличительные особенности нового класса. В результате новый объект будет обладать всеми свойствами родительского класса плюс своими собственными отличительными особенностями.
Пример 1. Можно создать базовый класс «транспортное средство», который универсален для всех средств передвижения, к примеру, на четырех колесах. Этот класс «знает», как двигаются колеса, как они поворачиваются, тормозят и т.д. Затем на основе этого класса создадим класс «легковой автомобиль». Поскольку новый класс унаследован из класса «транспортное средство», унаследованы все особенности этого класса, и нам не надо в очередной раз описывать, как двигаются колеса и т. д. Мы просто добавим те черты, которые характерны для легковых автомобилей. В то же время мы можем взять за основу этот же класс «транспортное средство» и построить класс «грузовые автомобили». Описав отличительные особенности грузовых автомобилей, получим новый класс «грузовые автомобили». А, к примеру, на основании класса «грузовой автомобиль» уже можно описать определенный подкласс грузовиков и т.д. Таким образом, сначала формируем простой шаблон, а затем, усложняя и конкретизируя, поэтапно создаем все более сложные шаблоны.