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

иллюзия — полагать, что кто-то может согласовать себя с сущностью реальности без использования языка и что язык— всего лишь случайное средство решения конкретных задач общения или мышления. Суть вопроса в том, что  «реальный мир» в значительной степени неосознанно строится на языковых привычках группы людей… Мы видим, слышим и испытываем остальные ощущения так, как мы это делаем, в значительной степени потому, что языковые обычаи нашего общества предрасполагают к определенному выбору способа интерпретации.

Эдвард Сапир (цитировано по[Whorf 1956]).

Цитата подчеркивает тот факт, что язык, на котором мы говорим, непосредственно влияет на способ восприятия мира. Это справедливо не только для естественных языков, подобных тем, что изучались в начале двадцатого века американскими лингвистами Эдвардом Сапиром и Ли Ворфом, но также и для искусственных языков, наподобие тех, что мы используем в программировании.

1.2.1. Эскимосы и снег

Примером, почти повсеместно цитируемым(хотя зачастую ошибочно— см.

[Pillum 1991]) в качестве иллюстрации того, как язык влияет на мышление, является тот  «факт», что в эскимосских(или юитских) языках имеется множество слов для описания различных типов снежного покрова— мокрого, плотного, подмерзшего и т. д. Это-то как раз не является удивительным. Любое сообщество с общими интересами естественным образом разрабатывает специализированный словарь необходимых понятий.

Что действительно важно — не слишком абсолютизировать вывод, который мы можем сделать из этого простого наблюдения. Главное не в том, что глаз эскимосов в каком-то

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

Таким образом, различные языки(например, эвенкийский) могут привести(но не обязательно требуют этого) к тому, чтобы смотреть на мир с разных сторон.

Чтобы эффективно использовать ООП, требуется глядеть на мир иным способом. Само по себе применение объектно-ориентированного языка программирования(такого, как C++) не вынуждает статьобъектно-ориентированнымпрограммистом. Использованиеобъектно-ориентированногоязыка упрощает разработку объектно-ориентированных приложений, но, как было остроумно замечено,  «программа фортрановского типа может быть написана на любом языке».

1.2.2.Пример из области программирования

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

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

 

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

(M — фиксированная константа порядка5–10) повторяющимся в последовательности ДНК.

ACTCGGATCTTGCATTTCGGCAATTGGACCCTGACTTGGCCA…

Программист, не долго думая, написал простую и прямолинейную программу на Fortran — нечто вроде

DO 10 I = 1, N-M

DO 10 J = 1, N-MFOUND=.TRUE.

DO 20 K = 1, M

20 IF (X(I+K-1).NE.X(J+K-1))FOUND=.FALSE. IF (FOUND) …

10 CONTINUE

Он был неприятно разочарован, когда пробные запуски программы показали, что она потребует многих часов для завершения работы. Студент обсудил эту проблему со студенткой, которая оказалась профессионалом в программировании на языке APL. Она сказала, что могла бы попробовать написать программу для решения этой задачи. Студент был в сомнении: Fortran известен как один из наиболее «эффективных» компилируемых языков, а APL реализовывался с помощью интерпретатора. Таким образом, тот факт, что APL-программист способен составить алгоритм, который требует для работы минуты, а не часы, был воспринят с определенной дозой недоверия.

APL-программист капере формулировала задачу. Вместо того чтобы работать с вектором из N элементов, она представила данные в виде матрицы, имеющей приблизительно N строк и M столбцов:

A C T C G G позиции 1 — M
C T C G G A позиции 2 — M+1
T C G G A T позиции 3 — M+2
C