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

Исходные тексты обучающих примеров, представленных в книге, можно получить анонимно, обратившись через ftp по адресуftp.cs.orst.edu, каталог/pub/budd/oopintro. В том же каталоге можно будет найти дополнительную информацию, например список ошибок, обнаруженных в книге, упражнения, копии  «прозрачек», которые я использую в своем курсе. Все это можно также увидеть через World Wide Web на моих личных домашних страницах по адресу http://www.cs.orst.edu/~budd/oopintro. Вопросы вы можете посылать электронной почтой по адресуbudd@cs.orst.edu или обычной почтой: Professor Timothy A. Budd, Department of Computer Science, Oregon State University, Corvallis, Oregon, 97331.

Что требуется знать для чтения книги

Я предполагаю, что читатель знаком хотя бы с одним традиционным языком программирования, например Pascal или С. Мои курсы были вполне успешно восприняты студентами последнего года undegraduate level и первого graduate level. В некоторых случаях(особенно в последней четверти книги) более глубокие знания окажутся полезны, но они не являются обязательными. Например, студент, который специализируется на разработке программного обеспечения, легче воспримет материал главы17, а обучающийся построению компиляторов сочтет главу21 вполне понятной. Тематику обеих глав можно упростить при необходимости.

Глава 1 : Объектно-ориентированное мышление

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

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

∙ООП — это революционная идея, совершенно непохожая на что-либо выдвигавшееся в программировании.

∙ООП — это эволюционный шаг, естественным образом вытекающий из предшествующей истории.

1.1. Почему ООП так популярно?

Я перечислю некоторые (на мой взгляд— самые главные) причины огромной популярности объектно-ориентированного программирования в последнее десятилетие:

∙надежда, что ООП может просто и быстро привести к росту продуктивности и улучшению надежности программ, помогая тем самым разрешить кризис в программном обеспечении;

∙желание перейти от существующих языков программирования к новой технологии;

∙вдохновляющее сходство с идеями, родившимися в других областях.

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

Несмотря на то что объектно-ориентированное программирование действительно помогает при создании сложных программных систем, важно помнить, что ООП не является  «серебряной пулей» (термин, ставший популярным благодаря Фреду Бруксу[Brooks 1987]), которая запросто справляется с чудовищем. Программирование по- прежнему является одной из наиболее трудных задач, взваливаемых на себя человеком. Чтобы стать профессионалом в программировании, необходимы талант, способность к творчеству, интеллект, знания, логика, умение строить и использовать абстракции и, самое главное, опыт— даже в том случае, когда используются лучшие средства разработки.

Я подозреваю, что есть и другая причина особой популярности таких языков программирования, как C++ и Object Pascal (по контрасту соSmalltalk иBeta). Она состоит в том, что и администрация и разработчики надеются, что программист на языках C или Pascal может перейти на C++ или Object Pascal с той же легкостью, с которой происходит добавление нескольких букв на титульный лист сертификата о специальности. К сожалению, так происходит не всегда. Объектно-ориентированное программирование является новым пониманием того, что собственно называется вычислениями, а также того, как мы можем структурировать информацию внутри компьютера. Чтобы стать профессионалом в технике ООП, требуется полная переоценка привычных методов разработки программ.

1.2. Язык и мышление

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