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

Поделись знанием:
Перейти к: навигация, поиск
Парадигмы программирования
 • Императивная
(контрастирует с декларативной)
Процедурная
Структурная
Аспектно-ориентированная
Объектно-ориентированная
Агентно-ориентированная
Компонентно-ориентированная
Прототипно-ориентированная
Обобщённое программирование

 • Декларативная
(контрастирует с императивной)

Чистота языка
Чистота функции
Функциональная
В терминах Рефал-машины
Аппликативная
Комбинаторная
Бесточечная
(чистая конкатенативная)
Логическая
Ограничениями

 • Конкатенативная
 • Векторная[en]
 • Метапрограммирование

Языково-ориентированная
Предметно-ориентированная
Пользователями[en]
Автоматизация процесса программирования
Рефлексивность
Гомоиконность[en]

 • Связанные темы

Программирование в крупном и мелком масштабе[en]
Модульность
Полиморфизм
Продолжения и CPS
Параллелизм и конкурентность

 • Методы и алгоритмы

Автоматное
Динамическое
Потоков данных
Событийно-ориентированное
Реактивное
Сервис-ориентированное

Объе́ктно-ориенти́рованное программи́рование (ООП) — методология программирования, основанная на представлении программы в виде совокупности объектов, каждый из которых является экземпляром определенного класса[1], а классы образуют иерархию наследования[2][3].

Необходимо обратить внимание на следующие важные части этого определения: 1) объектно-ориентированное программирование использует в качестве основных логических конструктивных элементов объекты, а не алгоритмы; 2) каждый объект является экземпляром определенного класса; 3) классы образуют иерархии. Программа считается объектно-ориентированной, только если выполнены все три указанных требования. В частности, программирование, не использующее наследование, называется не объектно-ориентированным, а программированием с помощью абстрактных типов данных[4].




Основные понятия

Абстракция данных 
Абстрагирование означает выделение значимой информации и исключение из рассмотрения незначимой. В ООП рассматривают лишь абстракцию данных (нередко называя её просто «абстракцией»), подразумевая набор значимых характеристик объекта, доступный остальной программе.
Инкапсуляция[5] 
Инкапсуляция — свойство системы, позволяющее объединить данные и методы, работающие с ними, в классе. Некоторые языки (например, С++) отождествляют инкапсуляцию с сокрытием, но большинство (Smalltalk, Eiffel, OCaml) различают эти понятия.
Наследование[5] 
Наследование — свойство системы, позволяющее описать новый класс на основе уже существующего с частично или полностью заимствующейся функциональностью. Класс, от которого производится наследование, называется базовым, родительским или суперклассом. Новый класс — потомком, наследником, дочерним или производным классом.
Полиморфизм подтипов[5] 
Полиморфизм подтипов (в ООП называемый просто «полиморфизмом») — свойство системы, позволяющее использовать объекты с одинаковым интерфейсом без информации о типе и внутренней структуре объекта. Другой вид полиморфизма — параметрический — в ООП называют обобщённым программированием.
Класс 
Класс - универсальный, комплексный тип данных, состоящий из тематически единого набора «полей» (переменных более элементарных типов) и «методов» (функций для работы с этими полями), то есть он является моделью информационной сущности с внутренним и внешним интерфейсами для оперирования своим содержимым (значениями полей). В частности, в классах широко используются специальные блоки из одного или чаще двух спаренных методов, отвечающих за элементарные операции с определенным полем (интерфейс присваивания и считывания значения), которые имитируют непосредственный доступ к полю. Эти блоки называются «свойствами» и почти совпадают по конкретному имени со своим полем (например, имя поля может начинаться со строчной, а имя свойства – с заглавной буквы). Другим проявлением интерфейсной природы класса является то, что при копировании соответствующей переменной через присваивание, копируется только интерфейс, но не сами данные, то есть класс – ссылочный тип данных. Переменная-объект, относящаяся к заданному классом типу, называется экземпляром этого класса. При этом в некоторых исполняющих системах класс также может представляться некоторым объектом при выполнении программы посредством динамической идентификации типа данных. Обычно классы разрабатывают таким образом, чтобы обеспечить отвечающие природе объекта и решаемой задаче целостность данных объекта, а также удобный и простой интерфейс. В свою очередь, целостность предметной области объектов и их интерфейсов, а также удобство их проектирования, обеспечивается наследованием.
Объект 
Сущность в адресном пространстве вычислительной системы, появляющаяся при создании экземпляра класса (например, после запуска результатов компиляции и связывания исходного кода на выполнение).

Классификация подвидов ООП

Лука Карделли[en] и Мартин Абади построили теоретическое обоснование ООП и классификацию на основе этого обоснования[6][7][8][9]. Они отмечают, что выделенные ими понятия и категории вместе встречаются далеко не во всех ОО-языках, большинство языков поддерживают лишь подмножества теории, а порой и своеобразные отклонения от неё.

Ключевые понятия:

Класс описывает абстрактное поведение. Объектные типы строятся на основе класса посредством добавления различных приватных полей и методов. Объект (то есть значение объектного типа, традиционно называемое «экземпляром класса») порождается конструктором на основе начальных параметров.

Традиционно перечисляемые основные принципы ООП не аппелируют к данному теоретическому обоснованию, а являются устоявшимися в сообществе догмами (что приводит к сильному разбросу вариантов изложения в разных источниках). По большей части они относятся к языкам — потомкам Алгола и Симулы; в меньшей степени — к потомкам Smalltalk (в частности, часто упоминаемый принцип сокрытия в потомках Smalltalk семантически недоступен и идеологически считается несущественным). В значительно большей степени теоретически обоснованные концепции ООП поддерживают ОО-языки, развившиеся на поприще функционального программирования: OCaml, диалекты Haskell (O’Haskell, Mondrian), successor ML. Более того, основные идеи объектного моделирования в этом случае не требуют прямой поддержки со стороны языка, а могут быть сравнительно легко эмулированы[10].

Наиболее заметные отличия в проявлении показателей качества между языками разных видов:

Обобщённое обоснование динамической диспетчеризации[en] (включая множественную) в середине 1990-х годов построил Джузеппе Кастанья[12][13][9].

История

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

Взаимодействие объектов происходит посредством сообщений. Результатом дальнейшего развития ООП, по-видимому, будет агентно-ориентированое программирование, где агенты — независимые части кода на уровне выполнения. Взаимодействие агентов происходит посредством изменения среды, в которой они находятся.

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

Первым языком программирования, в котором были предложены основные понятия, впоследствии сложившиеся в парадигму, была Симула, но термин «объектная ориентированность» не использовался в контексте использования этого языка. В момент его появления в 1967 году в нём были предложены революционные идеи: объекты, классы, виртуальные методы и др., однако это всё не было воспринято современниками как нечто грандиозное. Фактически, Симула была «Алголом с классами», упрощающим выражение в процедурном программировании многих сложных концепций. Понятие класса в Симуле может быть полностью определено через композицию конструкций Алгола (то есть класс в Симуле — это нечто сложное, описываемое посредством примитивов).

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

В настоящее время количество прикладных языков программирования (список языков), реализующих объектно-ориентированную парадигму, является наибольшим по отношению к другим парадигмам. Наиболее распространённые в промышленности языки (С++, Delphi, C#, Java и др.) воплощают объектную модель Симулы. Примерами языков, опирающихся на модель Смолтока, являются Python, Ruby.

Определение ООП и его основные концепции

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

Наличие инкапсуляции достаточно для объектности языка программирования, но ещё не означает его объектной ориентированности — для этого требуется наличие наследования.

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

Сложности определения

ООП имеет уже более чем сорокалетнюю историю, но, несмотря на это, до сих пор не существует чёткого общепринятого определения данной технологии[14]. Основные принципы, заложенные в первые объектные языки и системы, подверглись существенному изменению (или искажению) и дополнению при многочисленных реализациях последующего времени. Кроме того, примерно с середины 1980-х годов термин «объектно-ориентированный» стал модным, в результате с ним произошло то же самое, что несколько раньше с термином «структурный» (ставшим модным после распространения технологии структурного программирования) — его стали искусственно «прикреплять» к любым новым разработкам, чтобы обеспечить им привлекательность. Бьёрн Страуструп в 1988 году писал, что обоснование «объектной ориентированности» чего-либо, в большинстве случаев, сводится к ложному силлогизму: «X — это хорошо. Объектная ориентированность — это хорошо. Следовательно, X является объектно-ориентированным».

Тимоти Бадд пишет[15][16]:

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

По мнению Алана Кея, создателя языка Smalltalk, которого считают одним из «отцов-основателей» ООП, объектно-ориентированный подход заключается в следующем наборе основных принципов (цитируется по вышеупомянутой книге Т. Бадда).

  1. Всё является объектом.
  2. Вычисления осуществляются путём взаимодействия (обмена данными) между объектами, при котором один объект требует, чтобы другой объект выполнил некоторое действие. Объекты взаимодействуют, посылая и получая сообщения. Сообщение — это запрос на выполнение действия, дополненный набором аргументов, которые могут понадобиться при выполнении действия.
  3. Каждый объект имеет независимую память, которая состоит из других объектов.
  4. Каждый объект является представителем класса, который выражает общие свойства объектов (таких, как целые числа или списки).
  5. В классе задаётся поведение (функциональность) объекта. Тем самым все объекты, которые являются экземплярами одного класса, могут выполнять одни и те же действия.
  6. Классы организованы в единую древовидную структуру с общим корнем, называемую иерархией наследования. Память и поведение, связанное с экземплярами определённого класса, автоматически доступны любому классу, расположенному ниже в иерархическом дереве.

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

Устойчивость и управляемость системы обеспечивается за счёт чёткого разделения ответственности объектов (за каждое действие отвечает определённый объект), однозначного определения интерфейсов межобъектного взаимодействия и полной изолированности внутренней структуры объекта от внешней среды (инкапсуляции).

Определить ООП можно и многими другими способами.

Концепции

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

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

Отдельного пояснения требует понятие обмена сообщениями. Первоначально (например, в том же Smalltalk) взаимодействие объектов представлялось как «настоящий» обмен сообщениями, то есть пересылка от одного объекта другому специального объекта-сообщения. Такая модель является чрезвычайно общей. Она прекрасно подходит, например, для описания параллельных вычислений с помощью активных объектов, каждый из которых имеет собственный поток исполнения и работает одновременно с прочими. Такие объекты могут вести себя как отдельные, абсолютно автономные вычислительные единицы. Посылка сообщений естественным образом решает вопрос обработки сообщений объектами, присвоенными полиморфным переменным — независимо от того, как объявляется переменная, сообщение обрабатывает код класса, к которому относится присвоенный переменной объект. Данный подход реализован в языках программирования Smalltalk, Ruby, Objective-C, Python.

Однако общность механизма обмена сообщениями имеет и другую сторону — «полноценная» передача сообщений требует дополнительных накладных расходов, что не всегда приемлемо. Поэтому во многих современных объектно-ориентированных языках программирования используется концепция «отправка сообщения как вызов метода» — объекты имеют доступные извне методы, вызовами которых и обеспечивается взаимодействие объектов. Данный подход реализован в огромном количестве языков программирования, в том числе C++, Object Pascal, Java, Oberon-2. Однако, это приводит к тому, что сообщения уже не являются самостоятельными объектами, и, как следствие, не имеют атрибутов, что сужает возможности программирования. Некоторые языки используют гибридное представление, демонстрируя преимущества одновременно обоих подходов — например, CLOS, Python.

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

Особенности реализации

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

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

Классы могут наследоваться друг от друга. Класс-потомок получает все поля и методы класса-родителя, но может дополнять их собственными либо переопределять уже имеющиеся. Большинство языков программирования поддерживает только единичное наследование (класс может иметь только один класс-родитель), лишь в некоторых допускается множественное наследование — порождение класса от двух или более классов-родителей. Множественное наследование создаёт целый ряд проблем, как логических, так и чисто реализационных, поэтому в полном объёме его поддержка не распространена. Вместо этого в 1990-е годы появилось и стало активно вводиться в объектно-ориентированные языки понятие интерфейса. Интерфейс — это класс без полей и без реализации, включающий только заголовки методов. Если некий класс наследует (или, как говорят, реализует) интерфейс, он должен реализовать все входящие в него методы. Использование интерфейсов предоставляет относительно дешёвую альтернативу множественному наследованию.

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

Инкапсуляция обеспечивается следующими средствами:

Контроль доступа 
Поскольку методы класса могут быть как чисто внутренними, обеспечивающими логику функционирования объекта, так и внешними, с помощью которых взаимодействуют объекты, необходимо обеспечить скрытость первых при доступности извне вторых. Для этого в языки вводятся специальные синтаксические конструкции, явно задающие область видимости каждого члена класса. Традиционно это модификаторы public, protected и private, обозначающие, соответственно, открытые члены класса, члены класса, доступные внутри класса и из классов-потомков, и скрытые, доступные только внутри класса. Конкретная номенклатура модификаторов и их точный смысл различаются в разных языках.
Методы доступа 
Поля класса в общем случае не должны быть доступны извне, поскольку такой доступ позволил бы произвольным образом менять внутреннее состояние объектов. Поэтому поля обычно объявляются скрытыми (либо язык в принципе не позволяет обращаться к полям класса извне), а для доступа к находящимся в полях данным используются специальные методы, называемые методами доступа. Такие методы либо возвращают значение того или иного поля, либо производят запись в это поле нового значения. При записи метод доступа может проконтролировать допустимость записываемого значения и, при необходимости, произвести другие манипуляции с данными объекта, чтобы они остались корректными (внутренне согласованными). Методы доступа называют ещё аксессорами (от англ. access — доступ), а по отдельности — геттерами (англ. get — чтение) и сеттерами (англ. set — запись)[17].
Свойства объекта 
Псевдополя, доступные для чтения и/или записи. Свойства внешне выглядят как поля и используются аналогично доступным полям (с некоторыми исключениями), однако фактически при обращении к ним происходит вызов методов доступа. Таким образом, свойства можно рассматривать как «умные» поля данных, сопровождающие доступ к внутренним данным объекта какими-либо дополнительными действиями (например, когда изменение координаты объекта сопровождается его перерисовкой на новом месте). Свойства, по сути, не более чем синтаксический сахар, поскольку никаких новых возможностей они не добавляют, а лишь скрывают вызов методов доступа. Конкретная языковая реализация свойств может быть разной. Например, в C# объявление свойства непосредственно содержит код методов доступа, который вызывается только при работе со свойствами, то есть не требует отдельных методов доступа, доступных для непосредственного вызова. В Delphi объявление свойства содержит лишь имена методов доступа, которые должны вызываться при обращении к полю. Сами методы доступа представляют собой обычные методы с некоторыми дополнительными требованиями к сигнатуре.

Полиморфизм реализуется путём введения в язык правил, согласно которым переменной типа «класс» может быть присвоен объект любого класса-потомка её класса.

Проектирование программ в целом

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

Объектно-ориентированное проектирование ориентируется на описание структуры проектируемой системы (приоритетно по отношению к описанию её поведения, в отличие от функционального программирования), то есть, фактически, в ответе на два основных вопроса:

  • Из каких частей состоит система;
  • В чём состоит ответственность каждой из ее частей.

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

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

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

Различные ООП-методологии

Компонентное программирование — следующий этап развития ООП; прототип- и класс-ориентированное программирование — разные подходы к созданию программы, которые могут комбинироваться, имеющие свои преимущества и недостатки.

Компонентное программирование

Компонентно-ориентированное программирование — это своеобразная «надстройка» над ООП, набор правил и ограничений, направленных на построение крупных развивающихся программных систем с большим временем жизни. Программная система в этой методологии представляет собой набор компонентов с хорошо определёнными интерфейсами. Изменения в существующую систему вносятся путём создания новых компонентов в дополнение или в качестве замены ранее существующих. При создании новых компонентов на основе ранее созданных запрещено использование наследования реализации — новый компонент может наследовать лишь интерфейсы базового. Таким образом компонентное программирование обходит проблему хрупкости базового класса.

Прототипное программирование

Прототипное программирование, сохранив часть черт ООП, отказалось от базовых понятий — класса и наследования.

  • Прототип — это объект-образец, по образу и подобию которого создаются другие объекты. Объекты-копии могут сохранять связь с родительским объектом, автоматически наследуя изменения в прототипе; эта особенность определяется в рамках конкретного языка.
  • Вместо механизма описания классов и порождения экземпляров язык предоставляет механизм создания объекта (путём задания набора полей и методов, которые объект должен иметь) и механизм клонирования объектов.
  • Каждый вновь созданный объект является «экземпляром без класса». Каждый объект может стать прототипом — быть использован для создания нового объекта с помощью операции клонирования. После клонирования новый объект может быть изменён, в частности, дополнен новыми полями и методами.
  • Клонированный объект либо становится полной копией прототипа, хранящей все значения его полей и дублирующей его методы, либо сохраняет ссылку на прототип, не включая в себя клонированных полей и методов до тех пор, пока они не будут изменены. В последнем случае среда исполнения обеспечивает механизм делегирования — если при обращении к объекту он сам не содержит нужного метода или поля данных, вызов передаётся прототипу, от него, при необходимости — дальше по цепочке.

Класс-ориентированное программирование

К:Википедия:Статьи без источников (тип: не указан)

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

Производительность объектных программ

Гради Буч указывает[18] на следующие причины, приводящие к снижению производительности программ из-за использования объектно-ориентированных средств:

Динамическое связывание методов 
Обеспечение полиморфного поведения объектов приводит к необходимости связывать методы, вызываемые программой (то есть определять, какой конкретно метод будет вызываться) не на этапе компиляции, а в процессе исполнения программы, на что тратится дополнительное время. При этом реально динамическое связывание требуется не более чем для 20 % вызовов, но некоторые ООП-языки используют его постоянно.
Значительная глубина абстракции 
ООП-разработка часто приводит к созданию «многослойных» приложений, где выполнение объектом требуемого действия сводится к множеству обращений к объектам более низкого уровня. В таком приложении происходит очень много вызовов методов и возвратов из методов, что, естественно, сказывается на производительности.
Наследование «размывает» код 
Код, относящийся к «конечным» классам иерархии наследования, которые обычно и используются программой непосредственно, находится не только в самих этих классах, но и в их классах-предках. Относящиеся к одному классу методы фактически описываются в разных классах. Это приводит к двум неприятным моментам:
  • Снижается скорость трансляции, так как компоновщику приходится подгружать описания всех классов иерархии.
  • Снижается производительность программы в системе со страничной памятью — поскольку методы одного класса физически находятся в разных местах кода, далеко друг от друга, при работе фрагментов программы, активно обращающихся к унаследованным методам, система вынуждена производить частые переключения страниц.
Инкапсуляция снижает скорость доступа к данным 
Запрет на прямой доступ к полям класса извне приводит к необходимости создания и использования методов доступа. И написание, и компиляция, и исполнение методов доступа сопряжены с дополнительными расходами.
Динамическое создание и уничтожение объектов 
Динамически создаваемые объекты, как правило, размещаются в куче, что менее эффективно, чем размещение их на стеке и, тем более, статическое выделение памяти под них на этапе компиляции.

Несмотря на отмеченные недостатки, Буч утверждает, что выгоды от использования ООП более весомы. Кроме того, повышение производительности за счёт лучшей организации ООП-кода, по его словам, в некоторых случаях компенсирует дополнительные накладные расходы на организацию функционирования программы. Можно также заметить, что многие эффекты снижения производительности могут сглаживаться или даже полностью устраняться за счёт качественной оптимизации кода компилятором. Например, упомянутое выше снижение скорости доступа к полям класса из-за использования методов доступа устраняется, если компилятор вместо вызова метода доступа использует инлайн-подстановку (современные компиляторы делают это вполне уверенно).

Критика ООП

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

Критические высказывания в адрес ООП:

  • Было показано отсутствие значимой разницы в продуктивности разработки программного обеспечения между ООП и процедурным подходом[19].
  • Кристофер Дэйт указывает на невозможность сравнения ООП и других технологий во многом из-за отсутствия строгого и общепризнанного определения ООП[20].
  • Александр Степанов в одном из своих интервью указывал, что ООП «методологически неправильно» и что «…ООП практически такая же мистификация, как и искусственный интеллект…»[21].
  • Фредерик Брукс указывает, что наиболее сложной частью создания программного обеспечения является «…спецификация, дизайн и тестирование концептуальных конструкций, а отнюдь не работа по выражению этих концептуальных конструкций…». ООП (наряду с такими технологиями как искусственный интеллект, верификация программ, автоматическое программирование, графическое программирование, экспертные системы и др.), по его мнению, не является «серебряной пулей», которая могла бы на порядок величины снизить сложность разработки программных систем. Согласно Бруксу, «…ООП позволяет сократить только привнесённую сложность в выражение дизайна. Дизайн остаётся сложным по своей природе…»[22].
  • Эдсгер Дейкстра указывал: «…то, о чём общество в большинстве случаев просит — это змеиное масло. Естественно, „змеиное масло“ имеет очень впечатляющие названия, иначе будет очень трудно что-то продать: „Структурный анализ и Дизайн“, „Программная инженерия“, „Модели зрелости“, „Управляющие информационные системы“ (Management Information Systems), „Интегрированные среды поддержки проектов“, „Объектная ориентированность“, „Реинжиниринг бизнес-процессов“…»[23].
  • Никлаус Вирт считает, что ООП — не более чем тривиальная надстройка над структурным программированием, и преувеличение её значимости, выражающееся, в том числе, во включении в языки программирования всё новых модных «объектно-ориентированных» средств, вредит качеству разрабатываемого программного обеспечения.
  • Патрик Киллелиа в своей книге «Тюнинг веб-сервера» писал: «…ООП предоставляет вам множество способов замедлить работу ваших программ…».
  • Известная обзорная статья проблем современного ООП-программирования перечисляет некоторые типичные проблемы ООП[24][неавторитетный источник? 3666 дней].
  • В программистском фольклоре получила широкое распространение критика объектно-ориентированного подхода в сравнении с функциональным подходом с использованием метафоры «Королевства Существительных» из эссе Стива Йегги[25].

Если попытаться классифицировать критические высказывания в адрес ООП, можно выделить несколько аспектов критики данного подхода к программированию.

Критика рекламы ООП 
Критикуется явно высказываемое или подразумеваемое в работах некоторых пропагандистов ООП, а также в рекламных материалах «объектно-ориентированных» средств разработки представление об объектном программировании как о некоем всемогущем подходе, который магическим образом устраняет сложность программирования. Как замечали многие, в том числе упомянутые выше Брукс и Дейкстра, «серебряной пули не существует» — независимо от того, какой парадигмы программирования придерживается разработчик, создание нетривиальной сложной программной системы всегда сопряжено со значительными затратами интеллектуальных ресурсов и времени. Из наиболее квалифицированных специалистов в области ООП никто, как правило, не отрицает справедливость критики этого типа.
Оспаривание эффективности разработки методами ООП 
Критики оспаривают тезис о том, что разработка объектно-ориентированных программ требует меньше ресурсов или приводит к созданию более качественного ПО. Проводится сравнение затрат на разработку разными методами, на основании которого делается вывод об отсутствии у ООП преимуществ в данном направлении. Учитывая крайнюю сложность объективного сравнения различных разработок, подобные сопоставления, как минимум, спорны. С другой стороны, получается, что ровно так же спорны и утверждения об эффективности ООП.
Производительность объектно-ориентированных программ 
Указывается на то, что целый ряд «врождённых особенностей» ООП-технологии делает построенные на её основе программы технически менее эффективными, по сравнению с аналогичными необъектными программами. Не отрицая действительно имеющихся дополнительных накладных расходов на организацию работы ООП-программ (см. раздел «Производительность» выше), нужно, однако, отметить, что значение снижения производительности часто преувеличивается критиками. В современных условиях, когда технические возможности компьютеров чрезвычайно велики и постоянно растут, для большинства прикладных программ техническая эффективность оказывается менее существенна, чем функциональность, скорость разработки и сопровождаемость. Лишь для некоторого, очень ограниченного класса программ (ПО встроенных систем, драйверы устройств, низкоуровневая часть системного ПО, научное ПО) производительность остаётся критическим фактором.
Критика отдельных технологических решений в ООП-языках и библиотеках 
Эта критика многочисленна, но затрагивает она не ООП как таковое, а приемлемость и применимость в конкретных случаях тех или иных реализаций её механизмов. Одним из излюбленных объектов критики является язык C++, входящий в число наиболее распространённых промышленных ООП-языков.

Объектно-ориентированные языки

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

Как правило, объектно-ориентированный язык (ООЯ) содержит следующий набор элементов:

  • Объявление классов с полями (данными — членами класса) и методами (функциями — членами класса).
  • Механизм расширения класса (наследования) — порождение нового класса от существующего с автоматическим включением всех особенностей реализации класса-предка в состав класса-потомка. Большинство ООЯ поддерживают только единичное наследование.
  • Полиморфные переменные и параметры функций (методов), позволяющие присваивать одной и той же переменной экземпляры различных классов.
  • Полиморфное поведение экземпляров классов за счёт использования виртуальных методов. В некоторых ООЯ все методы классов являются виртуальными.

Некоторые языки добавляют к указанному минимальному набору те или иные дополнительные средства. В их числе:

  • Конструкторы, деструкторы, финализаторы;
  • Свойства (аксессоры);
  • Индексаторы;
  • Средства управления видимостью компонентов классов (интерфейсы или модификаторы доступа, такие как public, private, protected, feature и др.).

Одни языки отвечают принципам ООП в полной мере — в них все основные элементы являются объектами, имеющими состояние и связанные методы. Примеры подобных языков — Smalltalk, Eiffel. Существуют гибридные языки, совмещающие объектную подсистему в целостном виде с подсистемами других парадигм как «два и более языка в одном», позволяющие совмещать в одной программе объектные модели с иными, и размывающие грань между объектно-ориентированной и другими парадигмами за счёт нестандартных возможностей, балансирующих между ООП и другими парадигмами (таких как множественная диспетчеризация, параметрические классы, возможность манипулировать методами классов как самостоятельными объектами, и др.). Примеры таких языков: CLOS, Dylan, OCaml, Python, Ruby, Objective-C. Однако, наиболее распространены языки, включающие средства эмуляции объектной модели поверх более традиционной императивной семантики. Алан Кэй назвал такие языки «склеиванием возможностей» (англ. agglutination of features) в противовес «чистоте стиля» (англ. crystalization of style) языков, воплощающих некую парадигму непосредственно[26]. Примеры таких языков — Симула, C++, Visual Basic, Delphi, Модула, Модула-2, Java, C#, PHP.

См. также

Напишите отзыв о статье "Объектно-ориентированное программирование"

Примечания

  1. В прототипном программировании экземпляр класса называется прототипом
  2. Объектно-ориентированный анализ и проектирование с примерами приложений (UML 2). Третье издание Гради Буч, Роберт А. Максимчук, Майкл У. Энгл, Бобби Дж. Янг, Джим Коналлен, Келли А. Хьюстон, Издательство: Вильямс, 2010, ISBN 978-5-8459-1401-9, ISBN 0-201-89551-X
  3. Гради Буч. Объектно-ориентированный анализ и проектирование с примерами приложений на С++. 2-е издание, Издательство: Бином, Невский Диалект, 1998, ISBN 0-8053-5340-2, ISBN 5-7989-0067-3, ISBN 5-7940-0017-1
  4. Гради Буч.Объектно-ориентированный анализ и проектирование с примерами приложений на С++. 2-е издание, Rational Санта Клара, Калифорния,перевод с английского под редакцией И. Романовского и Ф. Андреева, Издательство: Бином, Невский Диалект, 1998, ISBN 0-8053-5340-2, ISBN 5-7989-0067-3, ISBN 5-7940-0017-1, Глава 2.
  5. 1 2 3 Бенджамин Пирс. Типы в языках программирования. Издательство Лямбда пресс, Добросвет, 2012
  6. Abadi, Cardelli - Semantics of Object Types.
  7. Cardelli - Typeful programming.
  8. Cardelli - On Understanding Types.
  9. 1 2 Пирс - Типы в языках программирования.
  10. [www.mlton.org/ObjectOrientedProgramming Object-Oriented Programming in Standard ML]
  11. Cardelli - On Understanding Types, 1.3. Kinds of Polymorphism, с. 6.
  12. Castagna, Ghelli, Longo. [dl.acm.org/citation.cfm?id=141537 A calculus for overloaded functions with subtyping.] // Information and Computation. — Academic press, 1995. — Т. 117, вып. 1. — С. 115–135. — DOI:10.1006/inco.1995.1033.
  13. Castagna. [www.springer.com/birkhauser/computer+science/book/978-0-8176-3905-1 Object-Oriented Programming: A Unified Foundation]. — Birkhäuser, 1996. — С. 384. — ISBN 978-0-8176-3905-1.
  14. [c2.com/cgi/wiki?NobodyAgreesOnWhatOoIs Nobody Agrees On What OO Is]
  15. Тимоти Бадд. Объектно-ориентированное программирование в действии = An Introduction to Object-Oriented Programming. — СПб.: «Питер», 1997. — 464 с. — (В действии). — 6000 экз. — ISBN 5-88782-270-8.
  16. [dl.acm.org/citation.cfm?id=66469&preflayout=flat Roger King, My cat is object-oriented]
  17. Следует, однако, заметить, что использование аксессоров подрывает инкапсуляцию, суть которой состоит не в сокрытии всех членов объекта, а в том, что внутреннее состояние объекта используется лишь для работы, совершаемой им непосредственно. В ООП программист работает с понятиями, а не с данными.
  18. Грэди Буч. Объектно-ориентированный анализ и проектирование с примерами приложений на С++ = Object-Oriented Analysis and Design with Applications / Пер. И.Романовский, Ф.Андреев. — 2-е изд. — М., СПб.: «Бином», «Невский диалект», 1998. — С. 276—278. — 560 с. — 6000 экз. — ISBN 5-7989-0067-3.
  19. Thomas E. Potok, Mladen Vouk, Andy Rindos. [www.csm.ornl.gov/~v8q/Homepage/Papers%20Old/spetep-%20printable.pdf Productivity Analysis of Object-Oriented Software Developed in a Commercial Environment] (англ.) // Software – Practice and Experience. — 1999. — Vol. 29, no. 10. — P. 833-847.
  20. C. J. Date, Introduction to Database Systems, 6th-ed., Page 650
  21. [www.stlport.org/resources/StepanovUSA.html STLport: An Interview with A. Stepanov]
  22. [web.archive.org/web/20070315075634/inst.eecs.berkeley.edu/~maratb/readings/NoSilverBullet.html «No Silver Bullet. Essence and Accidents of Software Engineering» (Computer Magazine; April 1987)]
  23. [www.cs.utexas.edu/users/EWD/transcriptions/EWD11xx/EWD1175.html EWD 1175: The strengths of the academic enterprise]
  24. [blogerator.ru/page/oop_why-objects-have-failed Почему объектно-ориентированное программирование провалилось]
  25. Steve Yegge. [steve-yegge.blogspot.com/2006/03/execution-in-kingdom-of-nouns.html Execution in the Kingdom of Nouns]. (англ.) — [ru-declarative.livejournal.com/64216.html частичный перевод] (рус.)
  26. Алан Кэй [stephane.ducasse.free.fr/FreeBooks/SmalltalkHistoryHOPL.pdf The Early History of Smalltalk]. — Apple Computer, ACM SIGPLAN Notices, vol.28, №3, March 1993.

Литература

  • Лука Карделли[en]. [www.lucacardelli.name/Papers/TypefulProg.pdf Typeful programming] ( (англ.)) // IFIP State-of-the-Art Reports. — New York: Springer-Verlag, 1991. — Вып. Formal Description of Programming Concepts.
  • Лука Карделли[en], Peter Wegner. [lucacardelli.name/Papers/OnUnderstanding.A4.pdf On Understanding Types, Data Abstraction, and Polymorphism] // ACM Computing Surveys. — New York, USA: ACM, 1985. — Т. 17, вып. 4. — С. 471–523. — ISSN [www.sigla.ru/table.jsp?f=8&t=3&v0=0360-0300&f=1003&t=1&v1=&f=4&t=2&v2=&f=21&t=3&v3=&f=1016&t=3&v4=&f=1016&t=3&v5=&bf=4&b=&d=0&ys=&ye=&lng=&ft=&mt=&dt=&vol=&pt=&iss=&ps=&pe=&tr=&tro=&cc=UNION&i=1&v=tagged&s=0&ss=0&st=0&i18n=ru&rlf=&psz=20&bs=20&ce=hJfuypee8JzzufeGmImYYIpZKRJeeOeeWGJIZRrRRrdmtdeee88NJJJJpeeefTJ3peKJJ3UWWPtzzzzzzzzzzzzzzzzzbzzvzzpy5zzjzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzztzzzzzzzbzzzzzzzzzzzzzzzzzzzzzzzzzzzvzzzzzzyeyTjkDnyHzTuueKZePz9decyzzLzzzL*.c8.NzrGJJvufeeeeeJheeyzjeeeeJh*peeeeKJJJJJJJJJJmjHvOJJJJJJJJJfeeeieeeeSJJJJJSJJJ3TeIJJJJ3..E.UEAcyhxD.eeeeeuzzzLJJJJ5.e8JJJheeeeeeeeeeeeyeeK3JJJJJJJJ*s7defeeeeeeeeeeeeeeeeeeeeeeeeeSJJJJJJJJZIJJzzz1..6LJJJJJJtJJZ4....EK*&debug=false 0360-0300]. — DOI:10.1145/6041.6042.
  • Martín Abadi, Лука Карделли[en]. [lucacardelli.name/Papers/PrimObjSemLICS.A4.pdf A Semantics of Object Types] ( (англ.)). — LICS[en], 1994.
  • Benjamin Pierce. [www.cis.upenn.edu/~bcpierce/tapl/ Types and Programming Languages]. — MIT Press, 2002. — ISBN 0-262-16209-1.
    • Перевод на русский язык: Бенджамин Пирс. Типы в языках программирования. — Добросвет, 2012. — 680 с. — ISBN 978-5-7913-0082-9.
  • Design Patterns
  • Иан Грэхем. Объектно-ориентированные методы. Принципы и практика = Object-Oriented Methods: Principles & Practice. — 3-е изд. — М.: «Вильямс», 2004. — С. 880. — ISBN 0-201-61913-X.
  • Антони Синтес. Освой самостоятельно объектно-ориентированное программирование за 21 день = Sams Teach Yourself Object-Oriented Programming in 21 Days. — М.: «Вильямс», 2002. — С. 672. — ISBN 0-672-32109-2.
  • Matt Weisfeld. The Object-Oriented Thought Process. — Fourth Edition. — Addison-Wesley Professional, 2013. — 336 с. — ISBN 978-0-321-86127-6.
  • Гради Буч, Роберт А. Максимчук, Майкл У. Энгл, Бобби Дж. Янг, Джим Коналлен, Келли А. Хьюстон. Объектно-ориентированный анализ и проектирование с примерами приложений. — 3-е издание. — «Вильямс», 2010. — ISBN 978-5-8459-1401-9. — ISBN 0-201-89551-X.

Ссылки

  • [www.computer-museum.ru/histsoft/oophist.htm C.Бобровский «История ООП»], PC Week/RE № 28 от 05.08.2003 г., стр. 10, и № 29 от 12.08.2003 г., стр. 20.
Критика ООП
  • [bugtraq.ru/library/programming/objectshavefailed.html Ричард П. Гэбриэл «Объектная парадигма провалилась»]
  • [bugtraq.ru/library/programming/objectshavenotfailed.html Гай Л. Стил «Объектная парадигма не провалилась»]

Отрывок, характеризующий Объектно-ориентированное программирование

«Ваша потеря так ужасна, что я иначе не могу себе объяснить ее, как особенную милость Бога, Который хочет испытать – любя вас – вас и вашу превосходную мать. Ах, мой друг, религия, и только одна религия, может нас, уже не говорю утешить, но избавить от отчаяния; одна религия может объяснить нам то, чего без ее помощи не может понять человек: для чего, зачем существа добрые, возвышенные, умеющие находить счастие в жизни, никому не только не вредящие, но необходимые для счастия других – призываются к Богу, а остаются жить злые, бесполезные, вредные, или такие, которые в тягость себе и другим. Первая смерть, которую я видела и которую никогда не забуду – смерть моей милой невестки, произвела на меня такое впечатление. Точно так же как вы спрашиваете судьбу, для чего было умирать вашему прекрасному брату, точно так же спрашивала я, для чего было умирать этому ангелу Лизе, которая не только не сделала какого нибудь зла человеку, но никогда кроме добрых мыслей не имела в своей душе. И что ж, мой друг, вот прошло с тех пор пять лет, и я, с своим ничтожным умом, уже начинаю ясно понимать, для чего ей нужно было умереть, и каким образом эта смерть была только выражением бесконечной благости Творца, все действия Которого, хотя мы их большею частью не понимаем, суть только проявления Его бесконечной любви к Своему творению. Может быть, я часто думаю, она была слишком ангельски невинна для того, чтобы иметь силу перенести все обязанности матери. Она была безупречна, как молодая жена; может быть, она не могла бы быть такою матерью. Теперь, мало того, что она оставила нам, и в особенности князю Андрею, самое чистое сожаление и воспоминание, она там вероятно получит то место, которого я не смею надеяться для себя. Но, не говоря уже о ней одной, эта ранняя и страшная смерть имела самое благотворное влияние, несмотря на всю печаль, на меня и на брата. Тогда, в минуту потери, эти мысли не могли притти мне; тогда я с ужасом отогнала бы их, но теперь это так ясно и несомненно. Пишу всё это вам, мой друг, только для того, чтобы убедить вас в евангельской истине, сделавшейся для меня жизненным правилом: ни один волос с головы не упадет без Его воли. А воля Его руководствуется только одною беспредельною любовью к нам, и потому всё, что ни случается с нами, всё для нашего блага. Вы спрашиваете, проведем ли мы следующую зиму в Москве? Несмотря на всё желание вас видеть, не думаю и не желаю этого. И вы удивитесь, что причиною тому Буонапарте. И вот почему: здоровье отца моего заметно слабеет: он не может переносить противоречий и делается раздражителен. Раздражительность эта, как вы знаете, обращена преимущественно на политические дела. Он не может перенести мысли о том, что Буонапарте ведет дело как с равными, со всеми государями Европы и в особенности с нашим, внуком Великой Екатерины! Как вы знаете, я совершенно равнодушна к политическим делам, но из слов моего отца и разговоров его с Михаилом Ивановичем, я знаю всё, что делается в мире, и в особенности все почести, воздаваемые Буонапарте, которого, как кажется, еще только в Лысых Горах на всем земном шаре не признают ни великим человеком, ни еще менее французским императором. И мой отец не может переносить этого. Мне кажется, что мой отец, преимущественно вследствие своего взгляда на политические дела и предвидя столкновения, которые у него будут, вследствие его манеры, не стесняясь ни с кем, высказывать свои мнения, неохотно говорит о поездке в Москву. Всё, что он выиграет от лечения, он потеряет вследствие споров о Буонапарте, которые неминуемы. Во всяком случае это решится очень скоро. Семейная жизнь наша идет по старому, за исключением присутствия брата Андрея. Он, как я уже писала вам, очень изменился последнее время. После его горя, он теперь только, в нынешнем году, совершенно нравственно ожил. Он стал таким, каким я его знала ребенком: добрым, нежным, с тем золотым сердцем, которому я не знаю равного. Он понял, как мне кажется, что жизнь для него не кончена. Но вместе с этой нравственной переменой, он физически очень ослабел. Он стал худее чем прежде, нервнее. Я боюсь за него и рада, что он предпринял эту поездку за границу, которую доктора уже давно предписывали ему. Я надеюсь, что это поправит его. Вы мне пишете, что в Петербурге о нем говорят, как об одном из самых деятельных, образованных и умных молодых людей. Простите за самолюбие родства – я никогда в этом не сомневалась. Нельзя счесть добро, которое он здесь сделал всем, начиная с своих мужиков и до дворян. Приехав в Петербург, он взял только то, что ему следовало. Удивляюсь, каким образом вообще доходят слухи из Петербурга в Москву и особенно такие неверные, как тот, о котором вы мне пишете, – слух о мнимой женитьбе брата на маленькой Ростовой. Я не думаю, чтобы Андрей когда нибудь женился на ком бы то ни было и в особенности на ней. И вот почему: во первых я знаю, что хотя он и редко говорит о покойной жене, но печаль этой потери слишком глубоко вкоренилась в его сердце, чтобы когда нибудь он решился дать ей преемницу и мачеху нашему маленькому ангелу. Во вторых потому, что, сколько я знаю, эта девушка не из того разряда женщин, которые могут нравиться князю Андрею. Не думаю, чтобы князь Андрей выбрал ее своею женою, и откровенно скажу: я не желаю этого. Но я заболталась, кончаю свой второй листок. Прощайте, мой милый друг; да сохранит вас Бог под Своим святым и могучим покровом. Моя милая подруга, mademoiselle Bourienne, целует вас.
Мари».


В середине лета, княжна Марья получила неожиданное письмо от князя Андрея из Швейцарии, в котором он сообщал ей странную и неожиданную новость. Князь Андрей объявлял о своей помолвке с Ростовой. Всё письмо его дышало любовной восторженностью к своей невесте и нежной дружбой и доверием к сестре. Он писал, что никогда не любил так, как любит теперь, и что теперь только понял и узнал жизнь; он просил сестру простить его за то, что в свой приезд в Лысые Горы он ничего не сказал ей об этом решении, хотя и говорил об этом с отцом. Он не сказал ей этого потому, что княжна Марья стала бы просить отца дать свое согласие, и не достигнув бы цели, раздражила бы отца, и на себе бы понесла всю тяжесть его неудовольствия. Впрочем, писал он, тогда еще дело не было так окончательно решено, как теперь. «Тогда отец назначил мне срок, год, и вот уже шесть месяцев, половина прошло из назначенного срока, и я остаюсь более, чем когда нибудь тверд в своем решении. Ежели бы доктора не задерживали меня здесь, на водах, я бы сам был в России, но теперь возвращение мое я должен отложить еще на три месяца. Ты знаешь меня и мои отношения с отцом. Мне ничего от него не нужно, я был и буду всегда независим, но сделать противное его воле, заслужить его гнев, когда может быть так недолго осталось ему быть с нами, разрушило бы наполовину мое счастие. Я пишу теперь ему письмо о том же и прошу тебя, выбрав добрую минуту, передать ему письмо и известить меня о том, как он смотрит на всё это и есть ли надежда на то, чтобы он согласился сократить срок на три месяца».
После долгих колебаний, сомнений и молитв, княжна Марья передала письмо отцу. На другой день старый князь сказал ей спокойно:
– Напиши брату, чтоб подождал, пока умру… Не долго – скоро развяжу…
Княжна хотела возразить что то, но отец не допустил ее, и стал всё более и более возвышать голос.
– Женись, женись, голубчик… Родство хорошее!… Умные люди, а? Богатые, а? Да. Хороша мачеха у Николушки будет! Напиши ты ему, что пускай женится хоть завтра. Мачеха Николушки будет – она, а я на Бурьенке женюсь!… Ха, ха, ха, и ему чтоб без мачехи не быть! Только одно, в моем доме больше баб не нужно; пускай женится, сам по себе живет. Может, и ты к нему переедешь? – обратился он к княжне Марье: – с Богом, по морозцу, по морозцу… по морозцу!…
После этой вспышки, князь не говорил больше ни разу об этом деле. Но сдержанная досада за малодушие сына выразилась в отношениях отца с дочерью. К прежним предлогам насмешек прибавился еще новый – разговор о мачехе и любезности к m lle Bourienne.
– Отчего же мне на ней не жениться? – говорил он дочери. – Славная княгиня будет! – И в последнее время, к недоуменью и удивлению своему, княжна Марья стала замечать, что отец ее действительно начинал больше и больше приближать к себе француженку. Княжна Марья написала князю Андрею о том, как отец принял его письмо; но утешала брата, подавая надежду примирить отца с этою мыслью.
Николушка и его воспитание, Andre и религия были утешениями и радостями княжны Марьи; но кроме того, так как каждому человеку нужны свои личные надежды, у княжны Марьи была в самой глубокой тайне ее души скрытая мечта и надежда, доставлявшая ей главное утешение в ее жизни. Утешительную эту мечту и надежду дали ей божьи люди – юродивые и странники, посещавшие ее тайно от князя. Чем больше жила княжна Марья, чем больше испытывала она жизнь и наблюдала ее, тем более удивляла ее близорукость людей, ищущих здесь на земле наслаждений и счастия; трудящихся, страдающих, борющихся и делающих зло друг другу, для достижения этого невозможного, призрачного и порочного счастия. «Князь Андрей любил жену, она умерла, ему мало этого, он хочет связать свое счастие с другой женщиной. Отец не хочет этого, потому что желает для Андрея более знатного и богатого супружества. И все они борются и страдают, и мучают, и портят свою душу, свою вечную душу, для достижения благ, которым срок есть мгновенье. Мало того, что мы сами знаем это, – Христос, сын Бога сошел на землю и сказал нам, что эта жизнь есть мгновенная жизнь, испытание, а мы всё держимся за нее и думаем в ней найти счастье. Как никто не понял этого? – думала княжна Марья. Никто кроме этих презренных божьих людей, которые с сумками за плечами приходят ко мне с заднего крыльца, боясь попасться на глаза князю, и не для того, чтобы не пострадать от него, а для того, чтобы его не ввести в грех. Оставить семью, родину, все заботы о мирских благах для того, чтобы не прилепляясь ни к чему, ходить в посконном рубище, под чужим именем с места на место, не делая вреда людям, и молясь за них, молясь и за тех, которые гонят, и за тех, которые покровительствуют: выше этой истины и жизни нет истины и жизни!»
Была одна странница, Федосьюшка, 50 ти летняя, маленькая, тихенькая, рябая женщина, ходившая уже более 30 ти лет босиком и в веригах. Ее особенно любила княжна Марья. Однажды, когда в темной комнате, при свете одной лампадки, Федосьюшка рассказывала о своей жизни, – княжне Марье вдруг с такой силой пришла мысль о том, что Федосьюшка одна нашла верный путь жизни, что она решилась сама пойти странствовать. Когда Федосьюшка пошла спать, княжна Марья долго думала над этим и наконец решила, что как ни странно это было – ей надо было итти странствовать. Она поверила свое намерение только одному духовнику монаху, отцу Акинфию, и духовник одобрил ее намерение. Под предлогом подарка странницам, княжна Марья припасла себе полное одеяние странницы: рубашку, лапти, кафтан и черный платок. Часто подходя к заветному комоду, княжна Марья останавливалась в нерешительности о том, не наступило ли уже время для приведения в исполнение ее намерения.
Часто слушая рассказы странниц, она возбуждалась их простыми, для них механическими, а для нее полными глубокого смысла речами, так что она была несколько раз готова бросить всё и бежать из дому. В воображении своем она уже видела себя с Федосьюшкой в грубом рубище, шагающей с палочкой и котомочкой по пыльной дороге, направляя свое странствие без зависти, без любви человеческой, без желаний от угодников к угодникам, и в конце концов, туда, где нет ни печали, ни воздыхания, а вечная радость и блаженство.
«Приду к одному месту, помолюсь; не успею привыкнуть, полюбить – пойду дальше. И буду итти до тех пор, пока ноги подкосятся, и лягу и умру где нибудь, и приду наконец в ту вечную, тихую пристань, где нет ни печали, ни воздыхания!…» думала княжна Марья.
Но потом, увидав отца и особенно маленького Коко, она ослабевала в своем намерении, потихоньку плакала и чувствовала, что она грешница: любила отца и племянника больше, чем Бога.



Библейское предание говорит, что отсутствие труда – праздность была условием блаженства первого человека до его падения. Любовь к праздности осталась та же и в падшем человеке, но проклятие всё тяготеет над человеком, и не только потому, что мы в поте лица должны снискивать хлеб свой, но потому, что по нравственным свойствам своим мы не можем быть праздны и спокойны. Тайный голос говорит, что мы должны быть виновны за то, что праздны. Ежели бы мог человек найти состояние, в котором он, будучи праздным, чувствовал бы себя полезным и исполняющим свой долг, он бы нашел одну сторону первобытного блаженства. И таким состоянием обязательной и безупречной праздности пользуется целое сословие – сословие военное. В этой то обязательной и безупречной праздности состояла и будет состоять главная привлекательность военной службы.
Николай Ростов испытывал вполне это блаженство, после 1807 года продолжая служить в Павлоградском полку, в котором он уже командовал эскадроном, принятым от Денисова.
Ростов сделался загрубелым, добрым малым, которого московские знакомые нашли бы несколько mauvais genre [дурного тона], но который был любим и уважаем товарищами, подчиненными и начальством и который был доволен своей жизнью. В последнее время, в 1809 году, он чаще в письмах из дому находил сетования матери на то, что дела расстраиваются хуже и хуже, и что пора бы ему приехать домой, обрадовать и успокоить стариков родителей.
Читая эти письма, Николай испытывал страх, что хотят вывести его из той среды, в которой он, оградив себя от всей житейской путаницы, жил так тихо и спокойно. Он чувствовал, что рано или поздно придется опять вступить в тот омут жизни с расстройствами и поправлениями дел, с учетами управляющих, ссорами, интригами, с связями, с обществом, с любовью Сони и обещанием ей. Всё это было страшно трудно, запутано, и он отвечал на письма матери, холодными классическими письмами, начинавшимися: Ma chere maman [Моя милая матушка] и кончавшимися: votre obeissant fils, [Ваш послушный сын,] умалчивая о том, когда он намерен приехать. В 1810 году он получил письма родных, в которых извещали его о помолвке Наташи с Болконским и о том, что свадьба будет через год, потому что старый князь не согласен. Это письмо огорчило, оскорбило Николая. Во первых, ему жалко было потерять из дома Наташу, которую он любил больше всех из семьи; во вторых, он с своей гусарской точки зрения жалел о том, что его не было при этом, потому что он бы показал этому Болконскому, что совсем не такая большая честь родство с ним и что, ежели он любит Наташу, то может обойтись и без разрешения сумасбродного отца. Минуту он колебался не попроситься ли в отпуск, чтоб увидать Наташу невестой, но тут подошли маневры, пришли соображения о Соне, о путанице, и Николай опять отложил. Но весной того же года он получил письмо матери, писавшей тайно от графа, и письмо это убедило его ехать. Она писала, что ежели Николай не приедет и не возьмется за дела, то всё именье пойдет с молотка и все пойдут по миру. Граф так слаб, так вверился Митеньке, и так добр, и так все его обманывают, что всё идет хуже и хуже. «Ради Бога, умоляю тебя, приезжай сейчас же, ежели ты не хочешь сделать меня и всё твое семейство несчастными», писала графиня.
Письмо это подействовало на Николая. У него был тот здравый смысл посредственности, который показывал ему, что было должно.
Теперь должно было ехать, если не в отставку, то в отпуск. Почему надо было ехать, он не знал; но выспавшись после обеда, он велел оседлать серого Марса, давно не езженного и страшно злого жеребца, и вернувшись на взмыленном жеребце домой, объявил Лаврушке (лакей Денисова остался у Ростова) и пришедшим вечером товарищам, что подает в отпуск и едет домой. Как ни трудно и странно было ему думать, что он уедет и не узнает из штаба (что ему особенно интересно было), произведен ли он будет в ротмистры, или получит Анну за последние маневры; как ни странно было думать, что он так и уедет, не продав графу Голуховскому тройку саврасых, которых польский граф торговал у него, и которых Ростов на пари бил, что продаст за 2 тысячи, как ни непонятно казалось, что без него будет тот бал, который гусары должны были дать панне Пшаздецкой в пику уланам, дававшим бал своей панне Боржозовской, – он знал, что надо ехать из этого ясного, хорошего мира куда то туда, где всё было вздор и путаница.
Через неделю вышел отпуск. Гусары товарищи не только по полку, но и по бригаде, дали обед Ростову, стоивший с головы по 15 руб. подписки, – играли две музыки, пели два хора песенников; Ростов плясал трепака с майором Басовым; пьяные офицеры качали, обнимали и уронили Ростова; солдаты третьего эскадрона еще раз качали его, и кричали ура! Потом Ростова положили в сани и проводили до первой станции.
До половины дороги, как это всегда бывает, от Кременчуга до Киева, все мысли Ростова были еще назади – в эскадроне; но перевалившись за половину, он уже начал забывать тройку саврасых, своего вахмистра Дожойвейку, и беспокойно начал спрашивать себя о том, что и как он найдет в Отрадном. Чем ближе он подъезжал, тем сильнее, гораздо сильнее (как будто нравственное чувство было подчинено тому же закону скорости падения тел в квадратах расстояний), он думал о своем доме; на последней перед Отрадным станции, дал ямщику три рубля на водку, и как мальчик задыхаясь вбежал на крыльцо дома.
После восторгов встречи, и после того странного чувства неудовлетворения в сравнении с тем, чего ожидаешь – всё то же, к чему же я так торопился! – Николай стал вживаться в свой старый мир дома. Отец и мать были те же, они только немного постарели. Новое в них било какое то беспокойство и иногда несогласие, которого не бывало прежде и которое, как скоро узнал Николай, происходило от дурного положения дел. Соне был уже двадцатый год. Она уже остановилась хорошеть, ничего не обещала больше того, что в ней было; но и этого было достаточно. Она вся дышала счастьем и любовью с тех пор как приехал Николай, и верная, непоколебимая любовь этой девушки радостно действовала на него. Петя и Наташа больше всех удивили Николая. Петя был уже большой, тринадцатилетний, красивый, весело и умно шаловливый мальчик, у которого уже ломался голос. На Наташу Николай долго удивлялся, и смеялся, глядя на нее.
– Совсем не та, – говорил он.
– Что ж, подурнела?
– Напротив, но важность какая то. Княгиня! – сказал он ей шопотом.
– Да, да, да, – радостно говорила Наташа.
Наташа рассказала ему свой роман с князем Андреем, его приезд в Отрадное и показала его последнее письмо.
– Что ж ты рад? – спрашивала Наташа. – Я так теперь спокойна, счастлива.
– Очень рад, – отвечал Николай. – Он отличный человек. Что ж ты очень влюблена?
– Как тебе сказать, – отвечала Наташа, – я была влюблена в Бориса, в учителя, в Денисова, но это совсем не то. Мне покойно, твердо. Я знаю, что лучше его не бывает людей, и мне так спокойно, хорошо теперь. Совсем не так, как прежде…
Николай выразил Наташе свое неудовольствие о том, что свадьба была отложена на год; но Наташа с ожесточением напустилась на брата, доказывая ему, что это не могло быть иначе, что дурно бы было вступить в семью против воли отца, что она сама этого хотела.
– Ты совсем, совсем не понимаешь, – говорила она. Николай замолчал и согласился с нею.
Брат часто удивлялся глядя на нее. Совсем не было похоже, чтобы она была влюбленная невеста в разлуке с своим женихом. Она была ровна, спокойна, весела совершенно по прежнему. Николая это удивляло и даже заставляло недоверчиво смотреть на сватовство Болконского. Он не верил в то, что ее судьба уже решена, тем более, что он не видал с нею князя Андрея. Ему всё казалось, что что нибудь не то, в этом предполагаемом браке.
«Зачем отсрочка? Зачем не обручились?» думал он. Разговорившись раз с матерью о сестре, он, к удивлению своему и отчасти к удовольствию, нашел, что мать точно так же в глубине души иногда недоверчиво смотрела на этот брак.
– Вот пишет, – говорила она, показывая сыну письмо князя Андрея с тем затаенным чувством недоброжелательства, которое всегда есть у матери против будущего супружеского счастия дочери, – пишет, что не приедет раньше декабря. Какое же это дело может задержать его? Верно болезнь! Здоровье слабое очень. Ты не говори Наташе. Ты не смотри, что она весела: это уж последнее девичье время доживает, а я знаю, что с ней делается всякий раз, как письма его получаем. А впрочем Бог даст, всё и хорошо будет, – заключала она всякий раз: – он отличный человек.


Первое время своего приезда Николай был серьезен и даже скучен. Его мучила предстоящая необходимость вмешаться в эти глупые дела хозяйства, для которых мать вызвала его. Чтобы скорее свалить с плеч эту обузу, на третий день своего приезда он сердито, не отвечая на вопрос, куда он идет, пошел с нахмуренными бровями во флигель к Митеньке и потребовал у него счеты всего. Что такое были эти счеты всего, Николай знал еще менее, чем пришедший в страх и недоумение Митенька. Разговор и учет Митеньки продолжался недолго. Староста, выборный и земский, дожидавшиеся в передней флигеля, со страхом и удовольствием слышали сначала, как загудел и затрещал как будто всё возвышавшийся голос молодого графа, слышали ругательные и страшные слова, сыпавшиеся одно за другим.
– Разбойник! Неблагодарная тварь!… изрублю собаку… не с папенькой… обворовал… – и т. д.
Потом эти люди с неменьшим удовольствием и страхом видели, как молодой граф, весь красный, с налитой кровью в глазах, за шиворот вытащил Митеньку, ногой и коленкой с большой ловкостью в удобное время между своих слов толкнул его под зад и закричал: «Вон! чтобы духу твоего, мерзавец, здесь не было!»
Митенька стремглав слетел с шести ступеней и убежал в клумбу. (Клумба эта была известная местность спасения преступников в Отрадном. Сам Митенька, приезжая пьяный из города, прятался в эту клумбу, и многие жители Отрадного, прятавшиеся от Митеньки, знали спасительную силу этой клумбы.)
Жена Митеньки и свояченицы с испуганными лицами высунулись в сени из дверей комнаты, где кипел чистый самовар и возвышалась приказчицкая высокая постель под стеганным одеялом, сшитым из коротких кусочков.
Молодой граф, задыхаясь, не обращая на них внимания, решительными шагами прошел мимо них и пошел в дом.
Графиня узнавшая тотчас через девушек о том, что произошло во флигеле, с одной стороны успокоилась в том отношении, что теперь состояние их должно поправиться, с другой стороны она беспокоилась о том, как перенесет это ее сын. Она подходила несколько раз на цыпочках к его двери, слушая, как он курил трубку за трубкой.
На другой день старый граф отозвал в сторону сына и с робкой улыбкой сказал ему:
– А знаешь ли, ты, моя душа, напрасно погорячился! Мне Митенька рассказал все.
«Я знал, подумал Николай, что никогда ничего не пойму здесь, в этом дурацком мире».
– Ты рассердился, что он не вписал эти 700 рублей. Ведь они у него написаны транспортом, а другую страницу ты не посмотрел.
– Папенька, он мерзавец и вор, я знаю. И что сделал, то сделал. А ежели вы не хотите, я ничего не буду говорить ему.
– Нет, моя душа (граф был смущен тоже. Он чувствовал, что он был дурным распорядителем имения своей жены и виноват был перед своими детьми но не знал, как поправить это) – Нет, я прошу тебя заняться делами, я стар, я…
– Нет, папенька, вы простите меня, ежели я сделал вам неприятное; я меньше вашего умею.
«Чорт с ними, с этими мужиками и деньгами, и транспортами по странице, думал он. Еще от угла на шесть кушей я понимал когда то, но по странице транспорт – ничего не понимаю», сказал он сам себе и с тех пор более не вступался в дела. Только однажды графиня позвала к себе сына, сообщила ему о том, что у нее есть вексель Анны Михайловны на две тысячи и спросила у Николая, как он думает поступить с ним.
– А вот как, – отвечал Николай. – Вы мне сказали, что это от меня зависит; я не люблю Анну Михайловну и не люблю Бориса, но они были дружны с нами и бедны. Так вот как! – и он разорвал вексель, и этим поступком слезами радости заставил рыдать старую графиню. После этого молодой Ростов, уже не вступаясь более ни в какие дела, с страстным увлечением занялся еще новыми для него делами псовой охоты, которая в больших размерах была заведена у старого графа.


Уже были зазимки, утренние морозы заковывали смоченную осенними дождями землю, уже зелень уклочилась и ярко зелено отделялась от полос буреющего, выбитого скотом, озимого и светло желтого ярового жнивья с красными полосами гречихи. Вершины и леса, в конце августа еще бывшие зелеными островами между черными полями озимей и жнивами, стали золотистыми и ярко красными островами посреди ярко зеленых озимей. Русак уже до половины затерся (перелинял), лисьи выводки начинали разбредаться, и молодые волки были больше собаки. Было лучшее охотничье время. Собаки горячего, молодого охотника Ростова уже не только вошли в охотничье тело, но и подбились так, что в общем совете охотников решено было три дня дать отдохнуть собакам и 16 сентября итти в отъезд, начиная с дубравы, где был нетронутый волчий выводок.
В таком положении были дела 14 го сентября.
Весь этот день охота была дома; было морозно и колко, но с вечера стало замолаживать и оттеплело. 15 сентября, когда молодой Ростов утром в халате выглянул в окно, он увидал такое утро, лучше которого ничего не могло быть для охоты: как будто небо таяло и без ветра спускалось на землю. Единственное движенье, которое было в воздухе, было тихое движенье сверху вниз спускающихся микроскопических капель мги или тумана. На оголившихся ветвях сада висели прозрачные капли и падали на только что свалившиеся листья. Земля на огороде, как мак, глянцевито мокро чернела, и в недалеком расстоянии сливалась с тусклым и влажным покровом тумана. Николай вышел на мокрое с натасканной грязью крыльцо: пахло вянущим лесом и собаками. Чернопегая, широкозадая сука Милка с большими черными на выкате глазами, увидав хозяина, встала, потянулась назад и легла по русачьи, потом неожиданно вскочила и лизнула его прямо в нос и усы. Другая борзая собака, увидав хозяина с цветной дорожки, выгибая спину, стремительно бросилась к крыльцу и подняв правило (хвост), стала тереться о ноги Николая.
– О гой! – послышался в это время тот неподражаемый охотничий подклик, который соединяет в себе и самый глубокий бас, и самый тонкий тенор; и из за угла вышел доезжачий и ловчий Данило, по украински в скобку обстриженный, седой, морщинистый охотник с гнутым арапником в руке и с тем выражением самостоятельности и презрения ко всему в мире, которое бывает только у охотников. Он снял свою черкесскую шапку перед барином, и презрительно посмотрел на него. Презрение это не было оскорбительно для барина: Николай знал, что этот всё презирающий и превыше всего стоящий Данило всё таки был его человек и охотник.
– Данила! – сказал Николай, робко чувствуя, что при виде этой охотничьей погоды, этих собак и охотника, его уже обхватило то непреодолимое охотничье чувство, в котором человек забывает все прежние намерения, как человек влюбленный в присутствии своей любовницы.
– Что прикажете, ваше сиятельство? – спросил протодиаконский, охриплый от порсканья бас, и два черные блестящие глаза взглянули исподлобья на замолчавшего барина. «Что, или не выдержишь?» как будто сказали эти два глаза.
– Хорош денек, а? И гоньба, и скачка, а? – сказал Николай, чеша за ушами Милку.
Данило не отвечал и помигал глазами.
– Уварку посылал послушать на заре, – сказал его бас после минутного молчанья, – сказывал, в отрадненский заказ перевела, там выли. (Перевела значило то, что волчица, про которую они оба знали, перешла с детьми в отрадненский лес, который был за две версты от дома и который был небольшое отъемное место.)
– А ведь ехать надо? – сказал Николай. – Приди ка ко мне с Уваркой.
– Как прикажете!
– Так погоди же кормить.
– Слушаю.
Через пять минут Данило с Уваркой стояли в большом кабинете Николая. Несмотря на то, что Данило был не велик ростом, видеть его в комнате производило впечатление подобное тому, как когда видишь лошадь или медведя на полу между мебелью и условиями людской жизни. Данило сам это чувствовал и, как обыкновенно, стоял у самой двери, стараясь говорить тише, не двигаться, чтобы не поломать как нибудь господских покоев, и стараясь поскорее всё высказать и выйти на простор, из под потолка под небо.
Окончив расспросы и выпытав сознание Данилы, что собаки ничего (Даниле и самому хотелось ехать), Николай велел седлать. Но только что Данила хотел выйти, как в комнату вошла быстрыми шагами Наташа, еще не причесанная и не одетая, в большом, нянином платке. Петя вбежал вместе с ней.
– Ты едешь? – сказала Наташа, – я так и знала! Соня говорила, что не поедете. Я знала, что нынче такой день, что нельзя не ехать.
– Едем, – неохотно отвечал Николай, которому нынче, так как он намеревался предпринять серьезную охоту, не хотелось брать Наташу и Петю. – Едем, да только за волками: тебе скучно будет.
– Ты знаешь, что это самое большое мое удовольствие, – сказала Наташа.
– Это дурно, – сам едет, велел седлать, а нам ничего не сказал.
– Тщетны россам все препоны, едем! – прокричал Петя.
– Да ведь тебе и нельзя: маменька сказала, что тебе нельзя, – сказал Николай, обращаясь к Наташе.
– Нет, я поеду, непременно поеду, – сказала решительно Наташа. – Данила, вели нам седлать, и Михайла чтоб выезжал с моей сворой, – обратилась она к ловчему.
И так то быть в комнате Даниле казалось неприлично и тяжело, но иметь какое нибудь дело с барышней – для него казалось невозможным. Он опустил глаза и поспешил выйти, как будто до него это не касалось, стараясь как нибудь нечаянно не повредить барышне.


Старый граф, всегда державший огромную охоту, теперь же передавший всю охоту в ведение сына, в этот день, 15 го сентября, развеселившись, собрался сам тоже выехать.
Через час вся охота была у крыльца. Николай с строгим и серьезным видом, показывавшим, что некогда теперь заниматься пустяками, прошел мимо Наташи и Пети, которые что то рассказывали ему. Он осмотрел все части охоты, послал вперед стаю и охотников в заезд, сел на своего рыжего донца и, подсвистывая собак своей своры, тронулся через гумно в поле, ведущее к отрадненскому заказу. Лошадь старого графа, игреневого меренка, называемого Вифлянкой, вел графский стремянной; сам же он должен был прямо выехать в дрожечках на оставленный ему лаз.
Всех гончих выведено было 54 собаки, под которыми, доезжачими и выжлятниками, выехало 6 человек. Борзятников кроме господ было 8 человек, за которыми рыскало более 40 борзых, так что с господскими сворами выехало в поле около 130 ти собак и 20 ти конных охотников.
Каждая собака знала хозяина и кличку. Каждый охотник знал свое дело, место и назначение. Как только вышли за ограду, все без шуму и разговоров равномерно и спокойно растянулись по дороге и полю, ведшими к отрадненскому лесу.
Как по пушному ковру шли по полю лошади, изредка шлепая по лужам, когда переходили через дороги. Туманное небо продолжало незаметно и равномерно спускаться на землю; в воздухе было тихо, тепло, беззвучно. Изредка слышались то подсвистыванье охотника, то храп лошади, то удар арапником или взвизг собаки, не шедшей на своем месте.
Отъехав с версту, навстречу Ростовской охоте из тумана показалось еще пять всадников с собаками. Впереди ехал свежий, красивый старик с большими седыми усами.
– Здравствуйте, дядюшка, – сказал Николай, когда старик подъехал к нему.
– Чистое дело марш!… Так и знал, – заговорил дядюшка (это был дальний родственник, небогатый сосед Ростовых), – так и знал, что не вытерпишь, и хорошо, что едешь. Чистое дело марш! (Это была любимая поговорка дядюшки.) – Бери заказ сейчас, а то мой Гирчик донес, что Илагины с охотой в Корниках стоят; они у тебя – чистое дело марш! – под носом выводок возьмут.
– Туда и иду. Что же, свалить стаи? – спросил Николай, – свалить…
Гончих соединили в одну стаю, и дядюшка с Николаем поехали рядом. Наташа, закутанная платками, из под которых виднелось оживленное с блестящими глазами лицо, подскакала к ним, сопутствуемая не отстававшими от нее Петей и Михайлой охотником и берейтором, который был приставлен нянькой при ней. Петя чему то смеялся и бил, и дергал свою лошадь. Наташа ловко и уверенно сидела на своем вороном Арабчике и верной рукой, без усилия, осадила его.
Дядюшка неодобрительно оглянулся на Петю и Наташу. Он не любил соединять баловство с серьезным делом охоты.
– Здравствуйте, дядюшка, и мы едем! – прокричал Петя.
– Здравствуйте то здравствуйте, да собак не передавите, – строго сказал дядюшка.
– Николенька, какая прелестная собака, Трунила! он узнал меня, – сказала Наташа про свою любимую гончую собаку.
«Трунила, во первых, не собака, а выжлец», подумал Николай и строго взглянул на сестру, стараясь ей дать почувствовать то расстояние, которое должно было их разделять в эту минуту. Наташа поняла это.
– Вы, дядюшка, не думайте, чтобы мы помешали кому нибудь, – сказала Наташа. Мы станем на своем месте и не пошевелимся.
– И хорошее дело, графинечка, – сказал дядюшка. – Только с лошади то не упадите, – прибавил он: – а то – чистое дело марш! – не на чем держаться то.
Остров отрадненского заказа виднелся саженях во ста, и доезжачие подходили к нему. Ростов, решив окончательно с дядюшкой, откуда бросать гончих и указав Наташе место, где ей стоять и где никак ничего не могло побежать, направился в заезд над оврагом.
– Ну, племянничек, на матерого становишься, – сказал дядюшка: чур не гладить (протравить).
– Как придется, отвечал Ростов. – Карай, фюит! – крикнул он, отвечая этим призывом на слова дядюшки. Карай был старый и уродливый, бурдастый кобель, известный тем, что он в одиночку бирал матерого волка. Все стали по местам.
Старый граф, зная охотничью горячность сына, поторопился не опоздать, и еще не успели доезжачие подъехать к месту, как Илья Андреич, веселый, румяный, с трясущимися щеками, на своих вороненьких подкатил по зеленям к оставленному ему лазу и, расправив шубку и надев охотничьи снаряды, влез на свою гладкую, сытую, смирную и добрую, поседевшую как и он, Вифлянку. Лошадей с дрожками отослали. Граф Илья Андреич, хотя и не охотник по душе, но знавший твердо охотничьи законы, въехал в опушку кустов, от которых он стоял, разобрал поводья, оправился на седле и, чувствуя себя готовым, оглянулся улыбаясь.
Подле него стоял его камердинер, старинный, но отяжелевший ездок, Семен Чекмарь. Чекмарь держал на своре трех лихих, но также зажиревших, как хозяин и лошадь, – волкодавов. Две собаки, умные, старые, улеглись без свор. Шагов на сто подальше в опушке стоял другой стремянной графа, Митька, отчаянный ездок и страстный охотник. Граф по старинной привычке выпил перед охотой серебряную чарку охотничьей запеканочки, закусил и запил полубутылкой своего любимого бордо.
Илья Андреич был немножко красен от вина и езды; глаза его, подернутые влагой, особенно блестели, и он, укутанный в шубку, сидя на седле, имел вид ребенка, которого собрали гулять. Худой, со втянутыми щеками Чекмарь, устроившись с своими делами, поглядывал на барина, с которым он жил 30 лет душа в душу, и, понимая его приятное расположение духа, ждал приятного разговора. Еще третье лицо подъехало осторожно (видно, уже оно было учено) из за леса и остановилось позади графа. Лицо это был старик в седой бороде, в женском капоте и высоком колпаке. Это был шут Настасья Ивановна.
– Ну, Настасья Ивановна, – подмигивая ему, шопотом сказал граф, – ты только оттопай зверя, тебе Данило задаст.
– Я сам… с усам, – сказал Настасья Ивановна.
– Шшшш! – зашикал граф и обратился к Семену.
– Наталью Ильиничну видел? – спросил он у Семена. – Где она?
– Они с Петром Ильичем от Жаровых бурьяно встали, – отвечал Семен улыбаясь. – Тоже дамы, а охоту большую имеют.
– А ты удивляешься, Семен, как она ездит… а? – сказал граф, хоть бы мужчине в пору!
– Как не дивиться? Смело, ловко.
– А Николаша где? Над Лядовским верхом что ль? – всё шопотом спрашивал граф.
– Так точно с. Уж они знают, где стать. Так тонко езду знают, что мы с Данилой другой раз диву даемся, – говорил Семен, зная, чем угодить барину.
– Хорошо ездит, а? А на коне то каков, а?
– Картину писать! Как намеднись из Заварзинских бурьянов помкнули лису. Они перескакивать стали, от уймища, страсть – лошадь тысяча рублей, а седоку цены нет. Да уж такого молодца поискать!
– Поискать… – повторил граф, видимо сожалея, что кончилась так скоро речь Семена. – Поискать? – сказал он, отворачивая полы шубки и доставая табакерку.
– Намедни как от обедни во всей регалии вышли, так Михаил то Сидорыч… – Семен не договорил, услыхав ясно раздававшийся в тихом воздухе гон с подвыванием не более двух или трех гончих. Он, наклонив голову, прислушался и молча погрозился барину. – На выводок натекли… – прошептал он, прямо на Лядовской повели.
Граф, забыв стереть улыбку с лица, смотрел перед собой вдаль по перемычке и, не нюхая, держал в руке табакерку. Вслед за лаем собак послышался голос по волку, поданный в басистый рог Данилы; стая присоединилась к первым трем собакам и слышно было, как заревели с заливом голоса гончих, с тем особенным подвыванием, которое служило признаком гона по волку. Доезжачие уже не порскали, а улюлюкали, и из за всех голосов выступал голос Данилы, то басистый, то пронзительно тонкий. Голос Данилы, казалось, наполнял весь лес, выходил из за леса и звучал далеко в поле.
Прислушавшись несколько секунд молча, граф и его стремянной убедились, что гончие разбились на две стаи: одна большая, ревевшая особенно горячо, стала удаляться, другая часть стаи понеслась вдоль по лесу мимо графа, и при этой стае было слышно улюлюканье Данилы. Оба эти гона сливались, переливались, но оба удалялись. Семен вздохнул и нагнулся, чтоб оправить сворку, в которой запутался молодой кобель; граф тоже вздохнул и, заметив в своей руке табакерку, открыл ее и достал щепоть. «Назад!» крикнул Семен на кобеля, который выступил за опушку. Граф вздрогнул и уронил табакерку. Настасья Ивановна слез и стал поднимать ее.
Граф и Семен смотрели на него. Вдруг, как это часто бывает, звук гона мгновенно приблизился, как будто вот, вот перед ними самими были лающие рты собак и улюлюканье Данилы.
Граф оглянулся и направо увидал Митьку, который выкатывавшимися глазами смотрел на графа и, подняв шапку, указывал ему вперед, на другую сторону.
– Береги! – закричал он таким голосом, что видно было, что это слово давно уже мучительно просилось у него наружу. И поскакал, выпустив собак, по направлению к графу.
Граф и Семен выскакали из опушки и налево от себя увидали волка, который, мягко переваливаясь, тихим скоком подскакивал левее их к той самой опушке, у которой они стояли. Злобные собаки визгнули и, сорвавшись со свор, понеслись к волку мимо ног лошадей.
Волк приостановил бег, неловко, как больной жабой, повернул свою лобастую голову к собакам, и также мягко переваливаясь прыгнул раз, другой и, мотнув поленом (хвостом), скрылся в опушку. В ту же минуту из противоположной опушки с ревом, похожим на плач, растерянно выскочила одна, другая, третья гончая, и вся стая понеслась по полю, по тому самому месту, где пролез (пробежал) волк. Вслед за гончими расступились кусты орешника и показалась бурая, почерневшая от поту лошадь Данилы. На длинной спине ее комочком, валясь вперед, сидел Данила без шапки с седыми, встрепанными волосами над красным, потным лицом.
– Улюлюлю, улюлю!… – кричал он. Когда он увидал графа, в глазах его сверкнула молния.
– Ж… – крикнул он, грозясь поднятым арапником на графа.
– Про…ли волка то!… охотники! – И как бы не удостоивая сконфуженного, испуганного графа дальнейшим разговором, он со всей злобой, приготовленной на графа, ударил по ввалившимся мокрым бокам бурого мерина и понесся за гончими. Граф, как наказанный, стоял оглядываясь и стараясь улыбкой вызвать в Семене сожаление к своему положению. Но Семена уже не было: он, в объезд по кустам, заскакивал волка от засеки. С двух сторон также перескакивали зверя борзятники. Но волк пошел кустами и ни один охотник не перехватил его.


Николай Ростов между тем стоял на своем месте, ожидая зверя. По приближению и отдалению гона, по звукам голосов известных ему собак, по приближению, отдалению и возвышению голосов доезжачих, он чувствовал то, что совершалось в острове. Он знал, что в острове были прибылые (молодые) и матерые (старые) волки; он знал, что гончие разбились на две стаи, что где нибудь травили, и что что нибудь случилось неблагополучное. Он всякую секунду на свою сторону ждал зверя. Он делал тысячи различных предположений о том, как и с какой стороны побежит зверь и как он будет травить его. Надежда сменялась отчаянием. Несколько раз он обращался к Богу с мольбою о том, чтобы волк вышел на него; он молился с тем страстным и совестливым чувством, с которым молятся люди в минуты сильного волнения, зависящего от ничтожной причины. «Ну, что Тебе стоит, говорил он Богу, – сделать это для меня! Знаю, что Ты велик, и что грех Тебя просить об этом; но ради Бога сделай, чтобы на меня вылез матерый, и чтобы Карай, на глазах „дядюшки“, который вон оттуда смотрит, влепился ему мертвой хваткой в горло». Тысячу раз в эти полчаса упорным, напряженным и беспокойным взглядом окидывал Ростов опушку лесов с двумя редкими дубами над осиновым подседом, и овраг с измытым краем, и шапку дядюшки, чуть видневшегося из за куста направо.
«Нет, не будет этого счастья, думал Ростов, а что бы стоило! Не будет! Мне всегда, и в картах, и на войне, во всем несчастье». Аустерлиц и Долохов ярко, но быстро сменяясь, мелькали в его воображении. «Только один раз бы в жизни затравить матерого волка, больше я не желаю!» думал он, напрягая слух и зрение, оглядываясь налево и опять направо и прислушиваясь к малейшим оттенкам звуков гона. Он взглянул опять направо и увидал, что по пустынному полю навстречу к нему бежало что то. «Нет, это не может быть!» подумал Ростов, тяжело вздыхая, как вздыхает человек при совершении того, что было долго ожидаемо им. Совершилось величайшее счастье – и так просто, без шума, без блеска, без ознаменования. Ростов не верил своим глазам и сомнение это продолжалось более секунды. Волк бежал вперед и перепрыгнул тяжело рытвину, которая была на его дороге. Это был старый зверь, с седою спиной и с наеденным красноватым брюхом. Он бежал не торопливо, очевидно убежденный, что никто не видит его. Ростов не дыша оглянулся на собак. Они лежали, стояли, не видя волка и ничего не понимая. Старый Карай, завернув голову и оскалив желтые зубы, сердито отыскивая блоху, щелкал ими на задних ляжках.
– Улюлюлю! – шопотом, оттопыривая губы, проговорил Ростов. Собаки, дрогнув железками, вскочили, насторожив уши. Карай почесал свою ляжку и встал, насторожив уши и слегка мотнул хвостом, на котором висели войлоки шерсти.
– Пускать – не пускать? – говорил сам себе Николай в то время как волк подвигался к нему, отделяясь от леса. Вдруг вся физиономия волка изменилась; он вздрогнул, увидав еще вероятно никогда не виданные им человеческие глаза, устремленные на него, и слегка поворотив к охотнику голову, остановился – назад или вперед? Э! всё равно, вперед!… видно, – как будто сказал он сам себе, и пустился вперед, уже не оглядываясь, мягким, редким, вольным, но решительным скоком.
– Улюлю!… – не своим голосом закричал Николай, и сама собою стремглав понеслась его добрая лошадь под гору, перескакивая через водомоины в поперечь волку; и еще быстрее, обогнав ее, понеслись собаки. Николай не слыхал своего крика, не чувствовал того, что он скачет, не видал ни собак, ни места, по которому он скачет; он видел только волка, который, усилив свой бег, скакал, не переменяя направления, по лощине. Первая показалась вблизи зверя чернопегая, широкозадая Милка и стала приближаться к зверю. Ближе, ближе… вот она приспела к нему. Но волк чуть покосился на нее, и вместо того, чтобы наддать, как она это всегда делала, Милка вдруг, подняв хвост, стала упираться на передние ноги.
– Улюлюлюлю! – кричал Николай.
Красный Любим выскочил из за Милки, стремительно бросился на волка и схватил его за гачи (ляжки задних ног), но в ту ж секунду испуганно перескочил на другую сторону. Волк присел, щелкнул зубами и опять поднялся и поскакал вперед, провожаемый на аршин расстояния всеми собаками, не приближавшимися к нему.
– Уйдет! Нет, это невозможно! – думал Николай, продолжая кричать охрипнувшим голосом.
– Карай! Улюлю!… – кричал он, отыскивая глазами старого кобеля, единственную свою надежду. Карай из всех своих старых сил, вытянувшись сколько мог, глядя на волка, тяжело скакал в сторону от зверя, наперерез ему. Но по быстроте скока волка и медленности скока собаки было видно, что расчет Карая был ошибочен. Николай уже не далеко впереди себя видел тот лес, до которого добежав, волк уйдет наверное. Впереди показались собаки и охотник, скакавший почти на встречу. Еще была надежда. Незнакомый Николаю, муругий молодой, длинный кобель чужой своры стремительно подлетел спереди к волку и почти опрокинул его. Волк быстро, как нельзя было ожидать от него, приподнялся и бросился к муругому кобелю, щелкнул зубами – и окровавленный, с распоротым боком кобель, пронзительно завизжав, ткнулся головой в землю.
– Караюшка! Отец!.. – плакал Николай…
Старый кобель, с своими мотавшимися на ляжках клоками, благодаря происшедшей остановке, перерезывая дорогу волку, был уже в пяти шагах от него. Как будто почувствовав опасность, волк покосился на Карая, еще дальше спрятав полено (хвост) между ног и наддал скоку. Но тут – Николай видел только, что что то сделалось с Караем – он мгновенно очутился на волке и с ним вместе повалился кубарем в водомоину, которая была перед ними.