Практический пример Инкапсуляция против сокрытия информации против абстракции против сокрытия данных в Java

Я знаю, что есть много постов по этому вопросу, в которых есть теоретическое объяснение с примерами в реальном времени. Эти термины ООП очень просты, но более запутаны для таких новичков, как я. Но я ожидаю здесь не определение и пример в реальном времени, НО ожидаю фрагмент кода в java.

Кто-нибудь, пожалуйста, дайте очень маленький фрагмент кода для каждого на Java, который поможет мне понять практическое понимание инкапсуляции, сокрытия информации, абстракции и сокрытия данных?< /сильный>


person Prashant Shilimkar    schedule 13.11.2013    source источник
comment
Сокрытие информации — это еще один способ сказать инкапсуляция. Предоставление недоверенным (или даже доверенным) клиентам доступа к состоянию объекта таким образом, что клиенты могут злонамеренно (или случайно) испортить состояние объекта, — это очень плохо. В максимально возможной степени состояние объекта должно быть скрыто от мира.   -  person scottb    schedule 13.11.2013


Ответы (2)


Инкапсуляция = сокрытие информации = сокрытие данных. Информация, которую не нужно знать другим для выполнения какой-либо задачи.

class Girl {
  private int age;
  Girl(int age) {
    this.age = age;
  }
  public boolean willGoOutWithGuy(boolean isGuyUgly) {
    return (age >= 22) && (!isGuyUgly);
  }
}

class Guy {
  private Girl girl = new Girl();
  private boolean isUgly = true;
  public boolean willGirlGoOutWithMe() {
    return girl.willGoOutWithGuy(isUgly);
  }
  // Guy doesn't have access to Girl's age. but he can ask her out. 
}

Абстракция = разные реализации одного и того же интерфейса.

public interface Car {
  public void start();
  public void stop();
}

class HotRod implements Car {
  // implement methods
}

class BattleTank implements Car {
  // implement methods
}

class GoCart implements Car {
  // implement methods
}

Все реализации уникальны, но могут быть привязаны к типу Car.

person yamafontes    schedule 13.11.2013
comment
Вы имеете в виду, когда мы делаем инкапсуляцию... информация и сокрытие данных также появляются в изображении (коде). Пожалуйста, поправьте меня, если я ошибаюсь. сокрытие данных и информации — это способ достижения инкапсуляции — это способ достижения абстракции. Я прав? - person Prashant Shilimkar; 13.11.2013
comment
Да, все эти концепции тесно связаны друг с другом в ООП. Инкапсуляция заключается в сокрытии деталей программы от вещей, которым это не нужно. Абстракция — это связывание общего поведения между связанными объектами. - person yamafontes; 13.11.2013
comment
Вы привели пример абстракции с использованием автомобильного интерфейса. Абстракция скрывает ненужную информацию и показывает важную информацию. Затем то, что мы скрываем, и то, что мы показываем в приведенном выше примере класса. Здесь я немного запутался. - person Prashant Shilimkar; 13.11.2013
comment
Весь смысл interface заключается в предоставлении универсального способа взаимодействия с объектами в иерархии Car. 3 примера, которые я привел, вероятно, будут иметь очень разные реализации, но их все равно можно использовать, как если бы они были одного типа. Идея состоит в том, чтобы скрыть детали реализации «под капотом», раскрывая при этом единый API. - person yamafontes; 13.11.2013
comment
Инкапсуляция заключается не в сокрытии деталей программы, а в сборе всех элементов данных и методов, работающих с этими членами данных, в одном контейнере. Вы можете достичь инкапсуляции без сокрытия данных, но вы не можете добиться сокрытия данных без инкапсуляции. - person raviraja; 17.09.2018

Чтобы уменьшить путаницу:

Инкапсуляция используется для сокрытия информации или данных.

Инкапсуляция означает автономный. Все объекты в Java имеют набор данных и методов для работы с этими данными. Таким образом, пользователь любого объекта не должен беспокоиться о том, как работает объект. Так вы скроете информацию и прочие сложности.

Пример: любого объекта Java достаточно для представления примера.

Абстракция. Это означает, что нужно делать вещи общими, т. е. вместо того, чтобы создавать очень конкретный класс, когда вы создаете базовые классы или интерфейсы, а затем расширяете их, чтобы получить свой конкретный класс.

Пример: класс Animal {} класс Lion расширяет Animal{}

Итак, здесь для класса Lion у вас есть обобщенный класс, то есть Animal. Это представляет собой абстракцию

Примечание. Примеры, приведенные KepaniHaole, идеальны.

Пример абстракции:

public interface Animal{
    public String getType();
}

class Lion implements Animal {
    private String animalType = "WILD";

    @Override
    public String getType() {
        return this.animalType;
    }
}
class Cow implements Animal {
    private String animalType = "Domestic";

    @Override
    public String getType() {
        return this.animalType;
    }
}

В этом примере классы Lion и Cow реализуют интерфейс Animal. Классы Lion и Cow override используют метод getType интерфейса Animal.

Здесь Lion и Cow являются частными случаями, а Animal более обобщенным. Так что это дает вам абстракцию, потому что всякий раз, когда у вас есть Animal, у вас есть метод getType, чтобы узнать его тип, т. е. вы его обобщили.

Теперь, если вы заметили, я сделал animalType закрытым в классах Lion и Cow, чтобы никто за пределами класса не мог его изменить. Таким образом я скрываю нежелательную информацию от внешних объектов.

Все, что нужно внешним объектам, — это метод getType, чтобы узнать тип животного. Таким образом, я открываю внешним объектам только релевантную информацию.

person me_digvijay    schedule 13.11.2013
comment
Пожалуйста, поправьте меня, если я ошибаюсь. сокрытие данных и информации — это способ достижения инкапсуляции — это способ достижения абстракции. Я прав? - person Prashant Shilimkar; 13.11.2013
comment
Я бы сказал по-другому: когда мы делаем инкапсуляцию... информация и сокрытие данных также появляются на картинке. Таким образом, encapsulation — это способ добиться этого скрытия, и когда вы делаете вещи общими, тогда появляется Абстракция. - person me_digvijay; 13.11.2013
comment
Не могли бы вы привести очень короткий пример абстракции в java с использованием интерфейса и объяснить, как мы скрываем не имп и как мы показываем информацию о имп. Спасибо. - person Prashant Shilimkar; 13.11.2013