Цель этой главы - помочь вам, опытным программистам, немного разучиться. Новичкам тоже следует прочесть эту главу, так как я собираюсь кусочек за кусочком выстроить перед вами целое здание, основанное (я надеюсь!) на блеске золота.

Итак, давайте немного вернемся к тому, о чем я рассказывал вам в восьмой главе.

ИНКАПСУЛЯЦИЯ REDUX

Основополагающим для понимания сущности объектов является осознание того, что коды и данные тесно переплетены между собой в единую структуру. (Я подразумеваю, что объект является "структурой данных", но я ненавижу пользоваться этим термином, так как объект является несколько большим, чем просто данные.) Этот аспект объектов называется инкапсуляцией, это слово в контексте Delphi подразумевает большее, чем оно означает, и из-за этого некоторые люди приходят в замешательство.

Обычно, слово "инкапсуляция" подразумевает, что нечто скрыто, упрятано внутри чего-то. И поначалу это и в самом деле было так: первый строго объектно-ориентированный язык Smalltalk фирмы Xerox встраивал поля объектов внутрь объекта в такой степени, что вы не могли прочитать или записать поля за пределами объекта. Абсолютно не могли! Это действительно инкапсуляция. Ключ состоял в том, что вы могли проникнуть в поля объекта с помощью его и только его методов.

На практике это означает, что большинство полей внутри объекта обладают двумя взаимосвязанными методами: одним, чтобы устанавливать в поле значение, и другим, чтобы возвращать значение в программу, вызывающую метод. Если бы мы писали на Smalltalk, TMortgage должен был бы иметь гораздо больше методов, чем он их имеет. Эти два были бы необходимы, например:

PROCEDURE TMortgage SetPeriods(NewPeriodsValue : Integer);
begin
Periods : = NewPeriodsValue;
end;

FUNCTION TMortgage.GetPeriods : Integer; begin GetPeriods = Periods; end

(И подобного было бы еще гораздо больше.) Теперь метод, принадлежащий к классу, может читать и писать поля класса (иначе сами по себе поля не были бы полезны). Таким образом, метод действует как "посредник" между полями класса и кодом, который тем или иным образом использует этот класс.

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


⇐ Предыдущая страница| |Следующая страница ⇒

Программирование в среде Delphi



Новости за месяц

  • Декабрь
    2021
  • Пн
  • Вт
  • Ср
  • Чт
  • Пт
  • Сб
  • Вс
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31