Рубрики
Без рубрики

Абстракция и пульт дистанционного управления

Этот пост является девятом серии, адаптированной из моей конференции, весело, дружелюбные компьютерные науки …. Помечено с компьютером, CodeNewie, начинающими, JavaScript.

Этот пост является девятом серии, адаптированной из моей конференции, Весело, дружелюбная компьютерная наука .

Когда вы нажимаете кнопку на пульте дистанционного управления, что-то происходит на вашем телевизоре. Объем поднимается, канал меняется и т. Д. Есть мало, конечные вещи, которые вы можете сделать с пультом. И вам не нужно знать, как это работает, чтобы ваши изменения произошли. Например, вам не нужно знать, как работает инфракрасный свет, как двоичный кодируется или декодируется, или как микропроцессор в ваших телевизионных действиях.

Это Абстракция Отказ Вы нажимаете кнопку и происходит вещь. И у вас есть только несколько кнопок на выбор.

Абстракция – это расширение инкапсуляции. Абстракция относится к сокрытию всех внутренних деталей реализации класса и обеспечивает очень мало, четких механизмов для других объектов в коде для взаимодействия друг с другом.

Если бы были псевдокомировать взаимодействие между пультом дистанционного управления и телевизором (с помощью JavaScript), результат может выглядеть что-то вроде этого (отказ от ответственности: я не инженер-электрик и не понимаю смесь, как работа по телевизору и дистанционному управлению Это грубое приближение. Я считаю тот факт, что вы также не инженер-электрик 😉)

const Remote = new RemoteControl();
let tvState = Remote.power();
renderTV(tvState);
tvState = Remote.turnUpVolume();
renderTV(tvState);
tvState = Remote.turnUpVolume();
renderTV(tvState);
tvState = Remote.turnDownVolume();
renderTV(tvState);

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

export default class RemoteControl {
  constructor() {
    this.television = new Television();
  }

  power() {
    return handleButtonClick(PowerButton, this.television);
  }

  turnUpVolume() {
    return handleButtonClick(VolumeUp, this.television);
  }

  turnDownVolume() {
    return handleButtonClick(VolumeDown, this.television);
  }
}

function handleButtonClick(button, television) {
  const encodedData = encodeButtonPressIntoBinary(button);
  return sendBinaryDataAsInfraredLight(encodedData, television);
}

function encodeButtonPressIntoBinary(button) {
  console.log("Assume the button data is encoded into binary");
  return { button: button };
}

function sendBinaryDataAsInfraredLight(binaryData, television) {
  const infraredLight = convertBinaryToInfraredLight(binaryData);
  console.log("Sending infrared light signal");
  return television.handleRemoteControlClick(infraredLight);
}

function convertBinaryToInfraredLight(binaryData) {
  console.log("Converting binary data into infrared light");
  return { lightData: binaryData };
}

Расширение телевизионной метафоры, подумайте до 50-х, 60-х и 70-х годов, когда телевизор не имел пульта дистанционного управления. Чтобы отказаться от объема, вы должны были встать, перейти к телевизору и повернуть одну из ручек на передней части телевизора. Это другая абстракция, другой способ, которым объект (в этом случае пользователь) взаимодействует с телевизором. Мы реализовали в 80-х годах, что было бы лучше, если бы мы могли указать на телевизор в телевизоре, что отправило бы свет, чтобы сказать телевизор, что делать Поэтому нам никогда не приходилось сойти с дивана.

При программировании, если кто-то говорит вам, что вы сделали «неправильную» абстракцию, то, что они означают, что интерфейс для того, как другие объекты используют ваш объект, не соответствуют требованиям. Это часто происходит, когда вы абстрактны и упрощаете свой код слишком рано, чтобы действительно знать, как другие объекты захотят его использовать. Это не большая сделка, мы все делаем это. Зачастую вам не нужно повторять весь свой код, просто слой между вашим объектом и его вызывающим объектами (метод подписи, входные данные, выходы и т. Д.).

Оригинал: “https://dev.to/mercedes/abstraction-and-remote-controls-31fg”