Можем ли мы иметь абстракцию без инкапсуляции или наоборот?

Я столкнулся с этим вопросом в интервью. Я вернулся и прочитал об этом здесь, на SO, и наткнулся на это, это и это и многие другие дубликаты говорят почти одно и то же.

Я понимаю, что общие определения предшествуют их реализации в языках программирования. Я также знаю, что языки программирования (я говорю о Java) стараются максимально разделить два определения. Например: Java рассматривает class как инкапсуляцию, поскольку предоставляет оболочку для хранения всех ваших подобных данных; а interface — это своего рода абстракция.

Но что я действительно хочу знать, так это то, как эти два определения пересекаются? Are the two subsets, overlapping, or completely disjoint sets. Я понимаю, что определения меняются по отношению к общим определениям и определениям для конкретного языка, поэтому, если можете, ответьте на оба или хотя бы упомяните то, о котором вы говорите.


person leo    schedule 09.09.2015    source источник
comment
Отвечает ли это на ваш вопрос? stackoverflow.com/a/22191855/126014   -  person Mark Seemann    schedule 09.09.2015
comment
Я должен сказать, что это блестящий способ объяснить абстракцию, но в ответе ничего не говорится об инкапсуляции.   -  person leo    schedule 09.09.2015
comment
Я предпочитаю определение инкапсуляции Бертрана Мейера, которое я кратко опишу здесь: stackoverflow.com/a/31133372/126014. узнайте больше об этом в мом курсе Pluralsight по инкапсуляции (и SOLID).   -  person Mark Seemann    schedule 09.09.2015