Объектно-ориентированное программирование

проводимым с помощью машин Тьюринга [Turing 1936]. В той форме, в которой мы его формулируем здесь, этот принцип был описан Клини, и им же было дано то название, под которым принцип теперь известен. Роджерс приводит хорошую сводку аргументов в защиту эквивалентности различных моделей вычислений[Rogers 1967].

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

Критика процедур как методики абстрагирования (поскольку они не способны обеспечить надлежащий механизм маскировки данных) была впервые проведена Вилльямом Вульфом и Мери Шоу[Wulf 1973] при анализе многочисленных проблем, связанных с использованием глобальных переменных. Эта аргументация была впоследствии расширена Дэвидом Хансоном[Hanson 1981].

 

Подобно многим словам, которые нашли себе место в общепринятом жаргоне, термин « объектно-ориентированный» используется гораздо шире своего фактического значения. Тем самым на вопрос:  «Что такое объектно-ориентированное программирование?» очень непросто ответить. Бьорн Страуструп[Stroustrup 1988] не без юмора заметил, что большинство аргументов сводится к следующему силлогизму:

∙X — это хорошо.

∙Объектная ориентированность — это хорошо.

∙Следовательно, X является объектно-ориентированным.

Роджер Кинг аргументированно настаивал, что его кот является  объектно- ориентированным. Кроме прочих своих достоинств, кот демонстрирует характерное поведение, реагирует на сообщения, наделен унаследованными реакциями и управляет своим вполне независимым внутренним состоянием.

Многие авторы пытались дать строгое определение тех свойств языка программирования, которыми он должен обладать, чтобы называться объектно-ориентированным, — см., к примеру, анализ, проведенный Джозефиной Микалеф[Micallef 1988] или Питером Вегнером[Wegner 1986].

Вегнер, к примеру, различает языки, основанные на объектах, которые поддерживают только абстрагирование(такие, какAda), и объектно-ориентированныеязыки, которые поддерживают наследование.

Другие авторы — среди них наиболее заметен Брэд Кокс[Cox 1990] — определяют термин ООП значительно шире. Согласно Коксу объектно-ориентированное программирование представляет собой метод или цель(objective) программирования путем сборки приложений из уже имеющихся компонент, а не конкретную технологию, которую мы можем использовать, чтобы достичь этой цели. Вместо выпячивания различий между подходами мы должны объединить воедино любые средства, которые

оказываются многообещающими на пути к новой Индустриальной Революции в программировании. Книга Кокса по ООП[Cox 1986], хотя и написана на заре развития объектно-ориентированного программирования, и в силу этого отчасти устаревшая в отношении деталей, тем не менее является одним из наиболее читаемых манифестов объектно-ориентированногодвижения.

Упражнения

1.В  объектно-ориентированнойиерархии наследования каждый следующий уровень является более специализированной формой предыдущего. Приведите пример иерархии из повседневной жизни с этим свойством. Некоторые из иерархий, обнаруживаемые в реальной жизни, не являются иерархиями наследования. Укажите пример иерархии без свойства наследования.

2.Посмотрите значение слова парадигма по крайней мере в трех словарях. Соотнесите эти определения с языками программирования.

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

4.Если вы знакомы с двумя (или более) различными языками программирования, приведите пример, когда один язык направляет мысль программиста к определенному решению, а другой— стимулирует альтернативное решение.

 

5.Если вы знакомы с двумя (или более) естественными языками, опишите ситуацию, когда один язык направляет говорящего в одном направлении, в то время как другой язык приводит к иному ходу мысли.

Глава 2 : Объектноориентированное проектирование

Когда программисты спрашивают друг друга:  «Чем же, в конце концов, является объектно-ориентированное программирование?», ответ чаще всего подчеркивает синтаксические свойства таких языков, какC++ илиObject Pascal, по сравнению с их более ранними, не объектно-ориентированнымиверсиями, то естьC илиPascal. Тем самым обсуждение обычно переходит на такие предметы, как классы и наследование, пересылка сообщений, виртуальные и статические методы. Но при этом опускают наиболее важный момент в объектно-ориентированном программировании, который не имеет ничего общего с вопросами синтаксиса.