Абстракция в объектно-ориентированном программировании

🎉 Вы можете найти новые и обновленные сообщения на ellehallal.dev

Это краткий пост в блоге о моем понимании абстракции. Абстракция — одна из ключевых концепций объектно-ориентированного программирования.

Его основная цель — скрыть детали и раскрыть только высокоуровневый механизм их использования. Детали реализации не должны быть показаны.

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

У меня есть запись в блоге об абстрактных классах и интерфейсах здесь, но вот быстрый пример использования абстрактного класса Phone и конкретного класса MobilePhone:

public abstract class Phone {
    public abstract void acceptIncomingCall();
    public abstract void makeOutgoingCall();
    public abstract void ring();
}
public class MobilePhone {
    public void acceptIncomingCall(){
      if(isRinging() & isPickupCallButtonPressed()){
        answerCall();
      }
    }
   
    public void makeOutgoingCall(){
      if(!isRinging() & isPhoneNumberEntered()){
        makeCall();
      }
    }
   
    public void ring(){
      System.out.println("Ring!");
    }
// note: other private methods in MobilePhone are not shown - isRinging(), isPickupCallButtonPressed(), isPhoneNumberEntered(), answerCall(), methodCall()
}

Как показано, MobilePhone реализовал абстрактные методы из Phone.

Еще одна демонстрация абстракции показана в MobilePhone, где только общедоступные методы acceptIncomingCall(), makeOutgoingCall и ring() доступны другим классам (общедоступным).

Все остальное под капотом скрыто, а следующие методы закрыты:isRinging(), isPickupCallButtonPressed(), isPhoneNumberEntered(), answerCall(), methodCall().