Высокий уровень интерфейс абстракции?
Я смущен абстракцией и инкапсуляцией.Я чувствую, что класс-это инкапсуляция, поскольку он инкапсулирует данные и поведение,а интерфейс-абстракция.Пожалуйста, прокомментируйте
4 ответов
Я думаю, что ваша терминология путается.
инкапсуляция - добавляет соответствующие данные и функциональность в одном месте. Мы можем получить это через классы
полиморфизм - позволяет обрабатывать значения различных типов данных с помощью единого интерфейса.
полиморфизм может быть достигнут путем наследования базовых классов (с виртуальными функциями) и / или путем реализации межфазные границы.
эти методы (и другие) дают нам абстрагирование, что действительно относится к любому из процессов, которые мы используем, чтобы разбить проблему на более мелкие компоненты.
редактировать
Q) вы спрашиваете: "могу ли я сказать,что абстракция-это самая верхняя иерархия, которая достигается путем инкапсуляции и полиморфизма?"
A) я не могу ответить на этот вопрос, я не знаю, что вы подразумеваете под "самым верхним" и "самым высоким". Нет иерархия здесь.
Функциональная Декомпозиция это форма абстракции, она может быть достигнута без использования объектной ориентации, где она должна быть в иерархии?
лучшее, что я могу сделать с иерархией, это определение (прямо из моей головы, так что YMMV)
- абстракция-это практика разбить большую проблему на меньшие компоненты, поэтому каждый меньше проблема может быть в (родственник) изоляция.
- полиморфизм-это метод, который мы можем используйте для достижения абстракции. Он включает в себя определение различных типов данных и поведения, которые могут быть обрабатывается однородным способом.
- интерфейс объявляет только типы поведение, инкапсулирующее поведение в типе. Он не обеспечивает фактическое поведение или данные
- абстрактный класс объявляет типы поведение, но может также обеспечить поведение и данные, все инкапсулированные в типе. , интерфейс можно увидеть как проще или чище форма полиморфизма, чем абстрактные занятия.
посмотрите на статью Википедии о абстракция в информатике. В частности, вас, вероятно, интересует абстракция в отношении объектно-ориентированного программирования. Я процитировал часть соответствующего раздела ниже:
в объектно-ориентированное программирование теория , абстракция включает в себя возможность определение объектов, представляющих абстрактные "актеры", которые могут выполнять работу, сообщают и изменить их состояние, и "общаться с другими объекты в система. Срок заключения относится к сокрытию сведений о состоянии, но расширение понятия типа данных из более ранних языков программирования наиболее сильно ассоциировать поведение с данные и стандартизация способа что различные типы данных взаимодействуют, это начало абстракции. Когда абстракция переходит в определенные операции, включающие объекты различных типов подставляться, это называется полиморфизмом. Когда это поступления в противоположное направление, внутри типов или классов, структурирование их для упрощения комплекса набор отношений, он называется делегирование или наследование.
вообще, я бы сказал, что интерфейсы и классы должны быть примерами абстракций, имеющих дело с данными как концептуальной "вещью", а не с необработанными данными. Инкапсуляция используется для того, чтобы эти абстракции хорошо работали с другими абстракциями концептуально разных "вещей"."
Я думаю, вы все правильно поняли. Интерфейс говорит, широко:вот что это такое. Класс говорит: вот как это работает; я спрячу детали внутри себя. Класс-это (обычно) конкретная реализация абстракции интерфейса.
цель инкапсуляции-скрыть детали реализации:
очень надуманный пример:
public class Person {
private int age;
public boolean canBuyBeer() {
return age >= 21;
}
}
вы можете позже изменить его на:
public class Person {
private int age;
private boolean isInUSA
public boolean canBuyBeer() {
if( isInUSA )
return age >= 21;
else
return age >= 18;
}
}
правила относительно возраста и происхождения могут измениться, но вызывающему абоненту не нужно знать.
интерфейсы могут использоваться для абстракции различных типов. Рассматривайте это:
public interface Beverage {
public boolean containsAlchohol;
}
public class Soda implements Beverage {
public boolean containsAlchohol {
return false;
}
}
public class Beer implements Beverage {
public boolean containsAlchohol {
return true;
}
}
вы можете обновить человека, как:
public class Person {
private int age;
private boolean isInUSA
public boolean canBuyBeverage(Beverage b) {
if( b.containsAlchohol() ) {
if( isInUSA )
return age >= 21;
else
return age >= 18;
}
else {
return true;
}
}
}
так человек инкапсуляция логика если человек может купить определенный вид напитка. Интерфейс напитка абстрагирует логику, связанную с напитком.
лучшие примеры можно иметь, но это общая идея.