Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Философия ООП.docx
Скачиваний:
53
Добавлен:
10.04.2015
Размер:
107.89 Кб
Скачать

Сокрытие информации и ответственность за поведение – первый принцип ооп

Способ видения мира

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

Действие в ООП инициируется посредством передачи сообщений агенту (объекту), ответственному за действия. Сообщение содержит запрос на осуществление действия и сопровождается дополнительной информацией (аргументами), необходимой для его выполнения. Получатель – это агент, посылается сообщение. Если он принимает сообщение, то на него автоматически возлагается ответственность за выполнение указанного действия. В качестве реакции на сообщение получатель запустит некоторый метод, чтобы удовлетворить принятый запрос.

Скрытие информации является важным принципом и в традиционных языках программирования.

Чем же пересылка сообщения отличается в ООП и в традиционных подходах.

Первое отличие состоит в том, что имеется вполне определенный получатель – агент, которому послано сообщение. При вызове процедуры нет столь явно выделенного получателя.

Второе отличие состоит в том, что интерпретация сообщения (а именно, метод, вызываемый после приема сообщения) зависит от получателя и является различной для различных получателей. Вы можете попросить своего товарища, летящего в город, где живут ваши родственники, поздравить их, и метод, который он изберет для решения этого запроса, будет отличаться от того, который использовали на почте. Хотя родственники будут поздравлены. Если же Вы попросите коменданта общежития поздравить Ваших родственников, то у нее вероятно вообще не найдется метода для решения этой задачи, а если она и примет сообщение, то выдаст диагностическое сообщение об ошибке.

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

Определение обязанностей объекта и его характеристик в одном месте, а также скрытие от внешнего мира внутренней реализации возможностей объекта, как в капсуле, называется инкапсуляцией.

Различие между взглядом структурного подхода и ООП можно выразить так:

Задавайтесь вопросом не о том, что Вы можете сделать для своих структур, а о том, что структуры данных могут сделать для Вас.

Вычисление и моделирование

Традиционная модель, описывающая выполнение программы на компьютере, базируется на дуализме - процесс-состояние. С этой точки зрения компьютер является администратором данных, следующим некоторому набору инструкций. В рамках ООП мы никогда не упоминаем адреса ячеек памяти, переменные, присваивания.

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

При ООП мы считаем, что вычисление есть моделирование поведения объекта. Конечно, объекты не могут во всех случаях реагировать на сообщение только тем, что вежливо обращаются друг к другу с просьбой выполнить некоторое действие. Это приведет к бесконечному циклу запросов, аналогично тому, как два джентльмена так и не вошли в дверь, уступая друг другу дорогу. На некоторой стадии объекты должны выполнять некоторые действия перед пересылкой запросов другим объектам.

Техника организации вычислений и данных

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