Инкапсуляция означает, что вы защищаете свои данные внутри вашего класса (или объекта) для внешнего мира и, как вы говорите, вы получаете доступ к закрытым или защищенным данным через методы (функции) из одного и того же объекта.
Абстракция - это что-то совершенно другое. Давайте возьмем пример. Представьте, что вы хотите использовать ограничения для полей формы. Например, у вас есть поле формы «email», которое может быть не пустым и должно содержать действительный адрес электронной почты.
Таким образом, вы хотите добавить различные виды ограничений к большому количеству полей формы во всем приложении.
Все ограничения должны иметь два метода:
1) метод, который проверяет данные поля формы, если они действительны
2) метод, который выдает сообщение об ошибке, если данные не valid
Теперь, прежде чем писать все эти различные объекты ограничений, вы можете написать один родительский класс ABSTRACT, который включает эти два метода, но без кода:
(я использую PHP)
abstract class Constraint
{
// Force Extending classes to define this methods
abstract protected function validate(string $data);
abstract protected function getErrorMessage();
}
Вышеуказанный класс является абстрактным и не может использоваться (создаваться) самим собой. Но вы можете написать разные классы ограничений, которые наследуют вышеуказанный класс:
class NotEmptyConstraint extends Constraint
{
// Mandatory overwritten methods:
protected function validate(string $data)
{
if(strlen($data) > 0 ) {
return true;
}
return false;
}
protected function getErrorMessage();
{
return 'This is a mandatory field';
}
}
Теперь все ваши классы ограничений имеют два обязательных метода, которые вы можете безопасно использовать, без необходимости знать, с каким именно ограничением вы имеете дело.
Надеюсь, это поможет ..