Все программные языки создают абстракции. Можно доказать, что сложность тех проблем, которые вы можете решать, напрямую соотносится с видом и качеством абстракции. Здесь и далее под "видом" мы понимаем именно то, что именно вы собираетесь абстрагировать. Язык ассемблера есть небольшая абстракция вычислительной машины. Множество следующих за ним языков было абстракциями языка ассемблера. Эти языки имели значительные преимущества, однако они по-прежнему заставляли вас думать скорее о структуре компьютера, чем о структуре проблемы, которую вы собирались решить. А программист должен установить соответствие между машинной моделью (в "пространстве решений", которое в данном случае есть компьютер) и моделью той проблемы, которая в действительности решается (в "пространстве проблем", т.е. в том месте, где проблема актуально существует). Усилия, которые для этого требовались, были огромными, кроме того сама проблема была совершенно "посторонней" по отношению к программному языку.
Имя пользователя: Captain_Grey
Личные сведения:
Имя: Андрей Никонов
Место жительства: гражданин Вселенной
Дата рождения: 05.25.75
Учебные заведения: не указано
Интересы: бороться и искать, Боже, храни полярников, Джо Дассен, найти и не сдаваться, невыносимая легкость бытия, одиночество, прекрасные дамы, самолеты, северный ветер, седьмое небо, ты у него в ладонях, танцы с волками, танцующая в темноте.
Друзья: не указано
Состоит в сообществах: не указано
О себе: романтик. Надеюсь, что не последний. Верю, что все еще может закончиться ничего себе. Здесь, само собой, должен быть смайл.
Объектно-ориентированный подход идет на шаг дальше: он дает инструменты для того, чтобы работать с элементами "пространства проблем". И это новое представление является достаточно общим. Мы обращаемся к элементам "пространства проблем" и к их представлениям в "пространстве решений" как к объектам. Идея в том, что программа позволяет адаптировать себя к языку проблемы благодаря созданию нового типа объектов. И, читая код, описывающий решение, вы также читаете слова, описывающие проблему. Таким образом абстракция становится более гибкой и мощной, чем она была до сих пор. ООП позволяет вам описывать проблему в терминах проблемы, а не в терминах компьютера, где работает решение. Однако и обратная связь все еще существует: каждый объект выглядит как маленький компьютер - он имеет состояние и набор операций, которые вы можете на нем выполнять. Но аналогия с реальным миром не так уж и плоха, ведь каждый объект реального мира имеет свои характеристики и поведение.
"Сохранить?" - спросила умная машина. Сохраняй, конечно, чего уж там. Анна решительно нажала кнопочку. Теперь они все утрутся, мстительно подумала она, следуя извилистой дорогой случайных ассоциаций. Каким образом "они" должны были утереться из-за прекрасного виртуала, оставалось пока загадкой. Додумывать логическую цепочку Анна не стала. Вместо этого она заботливо снабдила новорожденного аськой, добавила Андрея Никонова в свой контакт-лист и написала ему приветственное сообщение. Потом подобрала для Капитана Грея несколько симпатичных аватарок, разместила в его блоге верхний пост, жить до которого предстояло еще десять лет - и осталась вполне довольна своим творением. Подумала еще немного, в порыве вдохновения вытащила из сетевых кладезей фотку какого-то малоизвестного голливудского актера, обработала ее до неузнаваемости и неописуемой красоты и определила основным юзерпиком.
В ее собственном журнале в интересах сиротливо значились книги, кошки и мечтать о нем. Дата рождения целомудренно скрывалась, но наивно прописанный в профиле пединститут (МГПИ, факультет биологии, 1993 - 1998) безжалостно развеивал иллюзии читателей касательно юного возраста хозяйки.
Возраст, да. Вроде бы тридцать два - почти юность, расцвет, баланс желаний и возможностей, однако последние года три каждый день добавлял Анне новый камешек в копилку маеты и тоски. Еще чуть-чуть - и тридцать пять, а там и сорок, когда поздно и смешно все - любить, рожать, страдать и надеяться. Полешек в костер подбрасывали и милые подруженьки. Их у Аннушки наблюдалось ровным счетом две. И если добродушную Лильку еще можно было слушать, то Катька с ее активной позицией, реальным статусом дамы полусвета и тремя разводами в прошлой жизни была порой совершенно непереносима. Вот и вчера...
Можно следующим образом обобщить характеристики языка Java, понимая в то же время, что они представляют собой основу любого объектно-ориентированного программирования (ООП):
1. Каждый элемент, который вы используете, есть объект. Вы можете думать о нем как о "странной переменной"; она хранит данные, но к ней можно делать запросы, заставляя ее осуществлять операции над собой. В теории, вы можете взять любую существенную часть проблемы, которую собираетесь решить (люди, собаки, дороги, здания, мосты и т.п.), и представить ее как объект вашей программы.
2. Программа есть набор объектов, "разговаривающих" друг с другом путем отправки сообщений. Запрашивая объект о каком-то действии, вы посылаете ему сообщение. Говоря более конкретно, ваше сообщение есть вызов некой процедуры, определенной в самом объекте.
Они собрались на традиционные пятничные посиделки. Взяли, как приличные девушки, бутылочку чилийского красного, а на всякий случай - еще и водочки. Всякий случай, как обычно, произошел ближе к полуночи, и они были уже прилично назюзюкавшись, когда Катька, щуря круглые глаза сквозь сигаретный дым, ляпнула:
- Хороший ты человек, Анюта, но дура полная. Жалко мне тебя.
- С чего это ты такая жалостливая стала? Завидуешь, что ли? - вступилась за подружку Лилька, но Катьку было уже не остановить. Находил на нее иногда буйный стих, когда тянуло говорить правду, и только правду, а потом приходилось просить прощения, расставаться с мужиками, терять работу и менять место жительства. Впрочем, таких амоков за время их дружбы происходило несчетное количество (девочки, мы ж уже десять лет дружим! Не может быть, столько не живут!), и по опыту барышни знали, что долгая ссора им ни при какой погоде не грозит. Стало быть, Катька, находясь в полной безопасности, продолжала свою тираду:
- Дура ты, потому что упускаешь время и возможности. А ведь не страхолюдина. Не бог весть что, но и с такой мордой можно нормально жить. Опять же, квартира есть, родители у черта на куличках, дети не плачут - чего ты сидишь кулем? Ты в зеркало, мать, давно смотрела? Гусиные лапки заметила? А скоро и все остальное обвиснет, так и не попользуешься.
- Да-а, ты у нас специалист, я чуть не забыла! - ехидно протянула Лилька. - Вот такая специалистка моего и свела. Нормально, да - женатого мужика, с дитем, взяла вот так ... за необвисшее. Анька у нас все равно не такая, зря ты распинаешься!
- Твоего и овца бы свела. Тебе спасибо этой твари надо сказать, ты ж только после развода расцвела, как майская роза! Или, может, ты тосковала безутешно? А, Лилечка? А вот Анютка пропадает зазря. Обидно, блин, обидно! - из накрашенного Катькиного глаза выкатилась здоровенная слезища, и стало понятно, что все они уже всерьез пьяные, и самое время вызывать такси и разъезжаться по норам.
- Значит, так, девочки. Я. Могу. С вами. Поспорить на что хотите. Что. Через неделю. У меня. Будет. Самый. Лучший. В мире. Мужчина. - что именно тянуло Анну за язык, она и сама не понимала. Однако слово вылетело, на кону стояла бутылка коньяка "Реми Мартен", Катька впала в фазу веселого сумасшествия и в этом состоянии была благополучно усажена в машину и отправлена в родные пенаты.
Лилька тоже засобиралась. Она молча и сосредоточенно подкрасила губы, махнула расческой по кудрявой шевелюре, показала себе язык в зеркале. И только на пороге, чмокая Анну в щечку, шепнула на ухо:
- Ты только глупостей не делай, а? Скинемся на коньяк, фигня это. Не стоит оно того. - и исчезла в тихом ночном подъезде.
К следующей пятнице у Анны в активе имелась обширная переписка с интересным молодым человеком, каковую она и предъявила подружкам на очередном девичнике. Андрей Никонов оказался блестящим собеседником, умным, тонким, ироничным и явно заинтересованным в развитии отношений. Катька, конечно, не удержалась и съязвила в том духе, что на юзерпиках любая крокозябра выглядит древнегреческим богом Аполлоном - но язвила она как-то озадаченно, по привычке, без огонька. Лиля же, почитав профиль, только фыркнула - романтик, тоже мне достоинство. Однако в целом подружки Аннин выбор одобрили.
3. Каждый объект имеет выделенное пространство в памяти и составлен из иных объектов. Иначе говоря, вы создаете новое как упаковку, заполненную другими объектами. Тем самым создается программная сложность, спрятанная за внешней простотой.
4. Любой объект относится к определенному типу. Можно сказать также, что объект есть экземпляр определенного класса, а класс и тип здесь рассматриваются как синонимы. Важнейшая характеристика класса - ответ на вопрос о том, какие именно сообщения он может от вас принять.
- Ну и когда же у нас время икс? - плотоядно усмехнулась Катерина. - За письмишко коньяка не полагается, ты фактуру, фактуру давай! Время-то идет, часики тикают! - и она потрясла в воздухе запястьем, украшенным необыкновенной красоты хронометром.
- Все тебе будет, красавица. Можешь уже отправляться за "Реми Мартеном". У меня ведь еще неделя, правда? Торопиться некуда! - Анна понятия не имела, каким способом она будет выкручиваться. Но признавать позорное поражение и саморазоблачаться очень не хотелось. Тем более, что неделя в запасе все-таки была.
И прошла она нервно. Переписка с загадочным романтиком Андреем, разумеется, продолжалась и ежедневно предъявлялась подругам. Свидание назначили на вечер пятницы, пожертвовав по такому случаю традиционным шабашем. Коньяк был куплен и ждал неизбежного Анниного фиаско на амурном фронте.
- Девки, вы что, рехнулись? Вы правда собрались за мной следить? - по телефону Анна в последний раз пыталась предотвратить неизбежное, но тщетно! Катька была неумолима, да и Лилечка не имела ничего против невинного развлечения.
- Сама подумай, а вдруг он окажется маньяком! Вот нам будет удовольствие - твои части опознавать. Ты уж напиши тогда, где у тебя какие особенности, шестой палец, пирсинг, татушки свои сфотографируй! Не волнуйся, мы близко подходить не будем. Так... на расстоянии выстрела, как говорится. И тебе спокойнее, и нам веселее!
Ну и ладно, обреченно подумала Анна, ну и пусть. Пять минут позора, потом целый вечер издевательств... и все. Дальше жизнь опять пойдет по накатанному, работа - дом - пятница, и раз-два-три, раз-два-три, в ритме вальса. Жалко будет убивать неизвестного Андрея Никонова, она успела к нему привязаться. Осталось одеться в чистое и красивое. И держать хвост пистолетом. В конце концов, мало ли причин у молодого человека не придти на свидание неизвестно с кем? Он мог заболеть, попасть в пробку, запить, отравиться устрицами, ими многие травятся. Ничего страшного. И уж если искать позитив - так ли плохо пройтись по вечерней улице в красивом платье, гордо и загадочно цокая каблучками, дыша духами и туманами, хотя бы и без спутников?
Со стороны казалось, что невидимые миру инквизиторы ведут юную ведьму на неизбежный костер, хотя люди крепкой коммунистической закалки усмотрели бы в происходящем живую иллюстрацию к произведению классика и основоположника "Шаг вперед, два шага назад". Позорный столб ожидал Анну под восхитительно пошлыми часами центрального почтамта, и ходу до него оставалось минуты три.
Анна уложилась в десять. В спине она явственно ощущала дырку, просверленную любопытными подружками. Ну вот, уныло подумала она, сказка закончилась, карета превратилась в тыкву, да и не было никакой кареты, если честно. Сейчас вместо обещанного прекрасного юноши с букетом ирисов на нее прыгнут Лилька с Катькой, обсмеют, заверещат во весь голос какую-то чушь, а потом мы все вместе отправимся дегустировать выигранный Катериной "Реми Мартен". Еще шажок, потом потоптаться на месте, изображая обманутые ожидания, призывно осмотреться по сторонам - и все, финита. Сливаем воду, сушим весла.
- Анна! Девушка, вы ведь Анна, правда? Именно так я вас и представлял! - Андрей Никонов собственной персоной, улучшенная копия голливудского красавчика, улыбался и призывно помахивал букетом.
- Д-да, Анна... Анна - это я, а кто вы? - можно было придумать и что-нибудь поглупее, просто не было времени. Однако молодой человек совершенно не смутился, ловко занял цветами дрожащие Аннины руки и элегантно подхватил ее под левый локоток.
- А пойдемте пить кофе! Здесь неподалеку есть совершенно замечательное местечко!
Это Лилька, облегченно сообразила Анна. Вот паразитка, так ей хочется Катьку развести! Значит, розыгрыш. И Андрей, который наверняка какой-нибудь Петя или Вася, окажется обычным мальчиком из эскорт-услуг. Ну и пусть. По крайней мере, он точно не маньяк, уж это Лилька наверняка проверила. Ладно, будем получать удовольствие, а деньги я ей завтра отдам.
Анна расслабилась, покрепче ухватила под руку наемного кавалера и уверенно зашагала рядом с псевдоАндреем. Проходя мимо арки, в которой, по ее расчетам, должны были прятаться подружки, она особенно громко цокнула каблучком и высунула язык.
5. Все объекты данного типа могут получать одни и те же сообщения. Это утверждение не так тривиально, как кажется, поскольку объект типа "круг" есть также объект типа "геометрическая фигура". Тем самым все круги могут обрабатывать сообщения для фигур, и эта взаимозаменяемость есть одна из мощнейших концепций ООП.
- Аннушка, вы только не смейтесь... Если я скажу, что мечтал о вас всю жизнь - это будет очень банально, да? Вы мне снились даже - давно, пару лет назад. В этом самом платье, такая трогательная, такая красивая... Вы верите в судьбу, Аннушка? Нет, не говорите ничего. Потому что я и так знаю, что вы - моя единственная. На всем белом свете.
Хорошо играет, стервец, мысленно восхитилась Анна. Весь вечер она смеялась, шутила, выслушивала комплименты и анекдоты, даже протанцевала несколько па на опустевшем к полуночи тротуаре, и сейчас чувствовала себя королевой бала.
- Давайте завтра встретимся... то есть уже сегодня, конечно. Я заеду часиков в пять. Анна, почему вы так погрустнели? Я ничем вас не обидел?
Анна в это время занималась оценкой своих финансовых возможностей - мальчик, судя по всему, был из элитного заведения, а разорять Лильку на еще один вечер было бы не по-товарищески. Однако заначка имелась, и Анна решила продолжить веселье. Не солить же эти деньги, в самом деле. А с отпуском что-нибудь потом придумается.
- Хорошо, Андрюша, договорились. Буду очень рада вас видеть. - Анна потянулась светски чмокнуть молодого жиголо в щечку, но он перехватил ее губы.
Пришла в себя она уже перед дверью собственной квартиры. Поцелуй оказался таким, о котором она втайне мечтала - не слишком умелым, очень нежным, очень настоящим. Нетипичным для сотрудника эскорт-агентства.
- Лилька, ты бессовестная! То есть спасибо, конечно, но это ж сумасшедшие деньги! Сегодня я сама расплачусь, и тебе отдам, ты скажи, сколько? Катька-то не в курсе? Расскажешь потом, как у нее челюсть отпала!
- Подожди, мать, у тебя температура? Какие деньги? О чем ты?
- Что значит какие? Ты мальчика заказывала? Очень хороший мальчик, надо ему премию дать. Я и не знала, что ты по агентствам шаришься. Классно все вышло.
- Так, подруга. Сиди-ка ты дома, я сейчас подъеду, разберемся. Санитаров пока не вызываю.
- Это правда не ты? Лиль, ну скажи, что ты меня разыграла, я пойму, не обижусь, даже спасибо скажу! - Анна второй час пыталась вырвать из подруги признание, но Лилька ушла в глухой отказ.
- Анют, мне бы и в голову не пришло! Но хорош, хорош твой Андрей. Катька чуть сознание не потеряла!
- Да холера с ее сознанием! Если это не ты, то откуда он взялся!
- Так ты же с ним по интернету познакомилась, нет? Чего ты паникуешь, все же замечательно. Молодой, симпатичный, холостой, в тебя сразу влюбился - как по заказу. Радоваться надо, а ты истеришь.
- Лиля. Послушай. Меня. Очень внимательно. - Анна старалась удержать ситуацию в разумных рамках, но, похоже, было уже поздновато. Еще чуть-чуть - и любимая подруга собственноручно сдаст ее в психушку. Для Анниной же пользы, разумеется. - Никакого Андрея Никонова нет. И никогда не было. Я сама, своими руками сделала эту картинку. И аську на его имя я тоже завела сама. И все наши переговоры, которые ты с Катькой читала - это я сочинила, понимаешь? Я думала, ты догадалась, пожалела меня, мальчика нашла, а ты... а он... а я... - Анна наконец-то разревелась - громко, со слезами и соплями.
Объектно-ориентированный подход не ограничивается чистой имитацией. Вы можете даже не согласиться с тем, что любая программа есть некая модель реального мира и существующих в нем объектов, однако и в этом случае техника ООП может уменьшить огромный груз проблем до одного простого решения.
Как только класс создан, вы можете создать столько объектов этого типа, сколько вы хотите, и манипулировать ими так, как будто бы они были элементами проблемы, которую вы пытаетесь решить. А вызов для ООП состоит в том, чтобы задать однозначное соответствие между элементами пространства проблем и объектами пространства решений.
Лилька ошарашенно таращилась на рыдающую подругу. Потом потребовала:
- А ну, покажи!
Анна послушно побрела к компьютеру, включила его, открыла журнал Андрея, вошла в сеть.
- Любуйся, пожалуйста. Вот тебе профиль, вот тебе сообщения, вот тебе аська! - Анна отчаянно щелкала мышкой, переключая окошки.
- О, а это ты уже сегодня написала? - Лилька ткнула курсором в свежую запись, которая, если верить таймеру, появилась полчаса назад.
- Я сегодня ничего не писала! Мы с тобой два часа сидим, я и компьютер-то не включала!
- Да не трясись ты, давай почитаем! - Лильке, конечно, было проще, она все еще надеялась, что Анна шутит. Зря надеялась. Реальность размывалась, границы мира плыли, как весенний лед по широкой реке, и в комнате терпко пахло свежим безумием.
Сообщение было вполне обычным. При других обстоятельствах Анна бы обрадовалась и запрыгала на одной ножке.
Заголовок: я счастлив!
Настроение: эйфория
Музыка: Джо Дассен
Место: седьмое небо
Я встретил женщину своей мечты! Друзья, подержите за нас кулаки! Сегодня я признаюсь ей в любви! И мы будем вместе навсегда!
Девушки молча уставились друг на друга.
- Это точно не ты? - шепотом выдавила Лилька.
- Точно, ты же сама видела! - прошипела в ответ Анна.
- Так. Спокойствие, только спокойствие! - через пару минут Лильке все же удалось справиться с собой и заговорить почти нормальным голосом. - Ты коньяк купила, конечно? Молодец. Тащи его сюда. Во сколько, говоришь, твой Андрей появится? В пять? Вот и отлично. У него и спросим. И не переживай раньше времени. Мало ли какие совпадения бывают в жизни!
- Барышни, милые, да что вы себе придумали? Я настоящий! Хотите - могу паспорт показать! - две разъяренные фурии вжимали молодого человека в угол дивана, требуя немедленных объяснений.
- Не надо паспорт! - решительно заявила Анна. - Скажи пароль от своего журнала! - в пылу разбирательств они перешли на "ты", но этого никто даже не заметил.
Андрей смущенно покосился на Лилю.
- При ней говори! Сейчас мы тебя выведем на чистую воду! Мошенник! - Анна хлюпнула носом. Развлечение с наемным работником - еще куда ни шло, особенно на спор, но циничного надругательства над ее многолетним одиночеством душа вынести не могла.
- Стойте! - вмешалась Лилька. - Пусть каждый напишет пароль, а бумажки отдадите мне. И сравним.
- И что это значит? - Лиля вертела в руках два листочка, на каждом из которых было написано "vfhrbp75".
Анна выжидательно глянула на Андрея. Тот пожал плечами.
- Так звали моего кота. Это кличка - Маркиз в латинской раскладке. Ну и год рождения, естественно.
- Нет, Маркизом звали МОЕГО кота! У него была белая манишка...
- И белые лапки, да. Он прожил почти тринадцать лет и попал под машину. Аннушка, может, ты все же поверишь мне? Я не мошенник, не маньяк и не зомби. И ты действительно снилась мне давным-давно. Просто случилось чудо. Так бывает! - Андрей крепко обнял Анну, прижался губами к щеке. Тактичная Лилька тихонько вышла из комнаты.
Одной из наиболее впечатляющих вещей в языке Java является повторное использование кода. Но, чтобы быть революционным, вы должны получить от него гораздо больше, чем просто копирование и изменение. Такой подход использовался когда-то в процедурных языках типа C, и он работал не слишком хорошо. А решение в Java, как и все остальное, вертится вокруг класса. Вы используете код повторно путем создания нового класса, но, вместо создания его с нуля, вы используете существующие классы, которые кто-то уже создал и отладил. Трюк в том, чтобы использовать их, не касаясь пальцем уже существующего кода. И в Java есть два пути, чтобы это сделать. Путь первый прост и очевиден: вы создаете объекты существующего класса внутри нового класса. И этот путь называется композицией, поскольку новый объект складывается из уже существующих. Вы просто используете функциональность существующего кода, но не его форму.
Второй подход более тонкий. Он создает новый класс как тип уже существующего класса. Вы в буквальном смысле берете форму уже существующего класса и добавляете в нее новое, но не трогая то, что уже существует. Этот магический акт называется наследованием, а компилятор Java сделает большую часть работы для вас. Наследование есть один из краегоугольных камней ООП, и этот подход создает множество дополнительных импликаций.
- Пойдем! У нас даже хлеба нет! - Анна зевнула, шутливо пихнув ногой растянувшегося рядом Андрея. Дело было воскресным вечером, и за двое суток она полностью и окончательно поверила в судьбу, алые паруса и прекрасного принца, вызванного по интернету. Заодно она прониклась благоговейным чувством к всемирной паутине, всемогущей и великой. Но больше всего Анна наслаждалась полным, абсолютным совпадением души и тела - раньше она считала, что такие идеальные отношения бывают только в фантастических рассказах, однако нет же, нет, вот она, ее мечта, лежит и смотрит на нее влюбленными карими глазами, синематографически улыбаясь.
- Прекрасная дама гонит своего преданного раба на улицу в лютый мороз? Презренный раб подчиняется и ползет одеваться! - Андрей скорчил страдальческую рожицу и потянулся за джинсами.
- Какой еще лютый мороз? Май месяц, плюс восемнадцать! - расхохоталась Анна. - Нельзя быть таким лентяем!
- Я не лентяй! Я очень трудолюбивое и самоотверженное существо! И если прекрасная госпожа позволит, я докажу сей скромный тезис немедленно!
Все же доказательство тезиса решили перенести на после магазина, обоим очень хотелось есть. Теплые майские сумерки играли Анниными волосами. Мир казался нежным и прекрасным, а рядом шел, держа ее за руку, самый лучший человек на земле.
Бомжика Сережку Анна знала давно, еще с тех времен, когда сама она была маленькой девочкой, а Сережка - Сергеем Ивановичем, инженером-конструктором. Потом он сунулся в какой-то бизнес, потом исчез, а в его квартире поселились чужие люди. Повторно бывший Сергей Иванович возник в родном дворе уже прочно в облике Сережки, существа беззлобного и безвредного, хотя и довольно вонючего. Перебивался он тем, что удавалось выпросить у бывших соседей. Анна, как и многие в их доме, жалела Сережку и частенько подкидывала ему немного денег. Но знакомить бомжа с Андреем она совершенно не собиралась.
Сережка же, напротив, был настроен на общение. Он дружелюбно помахал Анне со скамейки, поднялся и направился к парочке, ухмыляясь беззубым ртом и горланя на всю улицу:
- Анька, солнце мое, привет тебе!
- Что за чудовище? - тихонько спросил Андрей.
- Сережка. Он мирный, несчастный даже. Был когда-то человеком, но вот не повезло.
- Как же я эту публику ненавижу! Такие вот несчастные моего Маркиза под машину кинули! Бежал котик, никому не мешал, никого не трогал... Ублюдки поганые, ненавижу, сейчас убью скота! Я ему покажу Аньку!
Андрей больно сжал Аннину руку. Она глянула на его лицо и ужаснулась. Совершенно незнакомая физиономия со скошенным лбом и квадратной тяжелой челюстью, набычившись, уставилась на пьяненького Сережку.
- Мразь!- прошипел Андрей незнакомым свистящим шепотом. - Мразь, мерзость! Я не позволю, чтобы оно дышало одним воздухом с тобой! Я его уничтожу!
- Андрюша, не надо, пожалуйста, не надо! - никто не слышал Анниных криков. У несчастного бомжика не было ни единого шанса - Андрей с неумолимостью автомата уничтожал чуждую и оскорбляющую взор прекрасной дамы форму жизни. Когда сбежался народ и Андрея смогли оттащить от Сережки, тот только мычал и пускал разбитыми губами кровавые пузыри. Кто-то закричал, кто-то вызвал скорую - Анна не видела ничего, она опрометью кинулась прочь, подальше от ужасного жестокого монстра, в которого превратился ее возлюбленный.
Полиморфизм есть третья существенная черта объектно-ориентированного языка, после абстракции данных и наследования.
Она создает новое измерение, в котором вы можете отделить совокупность доступных извне свойств и методов класса от деталей его реализации. Иначе говоря, отделить "что" от "как". Полиморфизм улучшает организацию кода и позволяет создавать "расширяемые" программы, которые могут "расти" не только во время создания проекта, но и позже, когда возникнет запрос на новую функциональность.
Полиморфный метод позволяет проявить одному типу свое отличие от другого, сходного с ним, если оба они происходят от одного и того же базового типа. Это отличие выражается в разном поведении методов, которые вы вызываете через базовый класс.
- Аннушка, милая, куда ты? Успокойся, не дрожи, я с тобой! - Андрей снова был прежним, милым и заботливым. Он обнимал ее, а перед глазами Анны все еще была незнакомая и страшная личина убийцы. Она передернула плечами, освобождаясь от объятий.
- Извини, Андрюша. Иди домой. Я сегодня не хочу тебя больше видеть. Мне надо подумать. Я должна побыть одна. - Анна почти бежала к дому, только бы скорее остаться в одиночестве и безопасности. Андрей пытался что-то сказать, но она, не слушая и не замечая его, метнулась в подъезд и с силой захлопнула дверь с кодовым замком, наплевав на запрещающую надпись.
Дома она проплакала полночи, испуганная, несчастная и голодная. Хлеба так и не успели купить.
- Анют, не спеши пороть горячку. Мало ли, что в жизни бывает. Я считаю, сначала надо с ним поговорить, узнать, что случилось. - Лилька, как всегда, была спокойна и рассудительна. - Мы с Катькой вечером к тебе подскочим. Андрей-то мириться придет?
- Не знаю, - хлюпнула в трубку Анна, - я уже ничего не знаю! Я его боюсь!
- Придет-придет, не сомневайся! Я же видела, как он на тебя смотрит! Анька, если честно, то я тебе завидую! За тебя морду бьют, а ты недовольна! Ладно, вечерком мы с Катькой его прощупаем! Пока, подруга!
- Катька, открой, а? Мне страшно.
Звонка в дверь Анна ждала с ужасом, Катька - с любопытством, а Лилька была готова всех защитить и утешить. В целом подружки считали, что надо прощать и мириться, причем Катька упирала на то, что Андрюша - прелесть какой красавчик и его нельзя упускать, Лилька вздыхала о возвышенной любви и невероятных совпадениях, загадочно косясь на Катерину (ее в историю с материализацией решили не посвящать, все равно не поверит), а Анна только всхлипывала, вспоминая волшебные двое суток, когда все было сказочно, и не было никакого Сережки, и прекрасный кареглазый принц влюбленно шептал ей на ухо милые глупости.
Катька томно поднялась с дивана, для тренировки стрельнула глазом в Анну и неспешно двинулась к двери, эротично покачивая бедрами. Послышалось неразборчивое "здравствуйте", "Анну? Можно, конечно", "ой, ну что вы", "проходите-проходите", и в комнату белой лебедью вплыла, наконец, Катерина, волоча под руку покрасневшего смущенного Андрея.
Конечно, приятно, когда молодой человек падает на колени и бормочет: "Прости, я сам не знаю, что на меня нашло! Клянусь, это никогда не повторится! Только не бросай меня, дай мне еще один шанс, я искал тебя всю жизнь!" Вдвойне приятно, когда такая лестная для каждой девушки сцена разыгрывается на глазах лучших подруг, втайне считающих свою товарку неудачницей и старой девой. Разумеется, Андрея простили - с испытательным сроком, но простили, обняли, поцеловали и приняли искупительную коробку конфет. Ночевать, правда, не оставили, после перенесенного стресса полагалось некоторое время воздерживаться от тесных контактов. Напоили чаем и отправили домой, договорившись завтра устроить коллективное увеселение. Катька уже в прихожей кричала, что если бы не они, преданные и верные подруги, то Анна наверняка сотворила бы какую-нибудь глупость, как она умеет - помнишь, Анют, с этим... как его? ах, Жориком, точно, Жориком, ведь неплохой был парень, а ты его прокинула, дурочка, и поэтому Андрей обязан, просто обязан выгулять всех троих в приличное место. Андрей уже давно ушел, а Катерина все повторяла, что место непременно должно быть приличным, пока Лилька не увела ее, наконец, в комнату.
- Дааа, хорош Андрюха! Повезло тебе, Анютка, где только такого нашла? - Катька мечтательно облизнулась и закурила. - А ты не ценишь, домой парня отправила. Отбить его у тебя, что ли?
- Ничего у тебя не выйдет, можешь даже не начинать! Неотбиваемый он. Он Анюту любит, понимаешь? - верная Лилька грудью встала на Аннину защиту.
- Неотбиваемых не бывает, - дернула плечиком Катерина, - бывают те, которых никому не надо! Да ладно, живи, Анют! Не трону я его, грех убогоньких обижать!
- Чего ты бесишься? Пользуйся своим бизнесменом, а к Аньке не лезь! И вообще, пойдем-ка по домам, завтра всем на работу. - Лиля честно старалась угомонить разошедшуюся подружку, но тут вмешалась Анна.
- Опять поспорить хочешь? А давай! Один коньяк, кстати, уже за тобой. Не разоришься? Я тебе даже фору дам - идите завтра без меня, веселитесь! Потом птице обломинго привет передашь! Лиль, ты ей не мешай - пусть корячится, посмеемся вечером! - Анну несло, и остановиться она уже не могла.
Катька внимательно посмотрела на подругу, набросила плащ и молча вышла. Лиля покрутила пальцем у виска и тоже исчезла.
- Андрюша, здравствуйте! А Анюта просила передать, что подойдет позже, на работе задерживается. Вечно у нее что-то случается, такая невезучая! Пойдемте, я вас пока поразвлекаю, а Лилечка за нами присмотрит, правда, Лилечка?
Катерина хохотала, плясала, трещала без умолку, поправляла изящной ручкой пышные волосы, заманчиво блестела белыми зубами и была совершенно неотразима. Лиля хмуро наблюдала за процессом успешного совращения верного рыцаря, но ничего не могла сделать - Анна просила не вмешиваться. Между тем на их столик начала поглядывать разгоряченная публика с явными планами потанцевать прекрасную Катерину.
- Андрюша, вы ведь не отпустите меня одну, правда? Я боюсь этих злых людей, они хотят меня обидеть! Вы же кавалер, проводите слабую женщину до дома! - за спиной красавицы довольно громко скрипнула зубами Лилька , но Катька скрип проигнорировала и продолжала набирать обороты.
- За Анюту не беспокойтесь, она не обидится! Мы ей потом все объясним, вот и Лиля свидетель, правда, Лилечка?
Анна издали наблюдала, как Андрей с Катериной вышли из кафе и направились ловить машину. Рука ее верного рыцаря обвилась вокруг талии подлой соблазнительницы - вначале робко, потом крепко и уверенно. Анна вытерла холодные злые слезы и побрела домой.
Основная философия Java состоит в том, что плохо сформированный код работать не будет.
Идеальный момент для того, чтобы отловить ошибку, это время компиляции, т.е. еще до первой попытки запустить программу. Однако не все проблемы можно выявить в это время. Остальные должны обрабатываться во время исполнения программы, причем определенный формализм позволяет источнику ошибок передать определенную информацию приемнику, а этот последний должен знать, как обработать ее надлежащим образом.
Имя пользователя: Captain_Grey
Вы действительно хотите удалить журнал?
- Да, действительно. Удаляй!
В течение месяца вы можете восстановить журнал. После этого он удаляется окончательно.
Спасибо за информацию, умная машина, подумала Анна. Пусть будет окончательно.
- Андрюша! Андрей! Что с тобой? - полураздетая Катька испуганно тормошила молодого человека. Тот, не закончив страстного лобзания Катерининых прелестей, вдруг обмяк, закатил глаза и свалился на пол. Пульс нащупывался, еле слышное дыхание улавливалось, но сознание не возвращалось.
- Доктор, что с ним? - под дверью реанимации плакали две симпатичные девушки.
- Пока ничего определенного сказать не могу. Сейчас он в коме. Будем наблюдать, будем обследовать. Звоните! И постарайтесь найти родственников!
- Надо Анне позвонить. - помолчав, сказала Лиля.
- Я пробовала, она сбрасывает! - всхлипнула Катерина. - И ведь это я, я во всем виновата!
- Успокойся. Может, он болел чем-то, мы ж не знаем. - Лилька взяла подругу под руку. - Пойдем отсюда. Завтра, все завтра.
Более ранние языки часто использовали множественные схемы обработки ошибок, которые вводились специальным соглашением и не были частью программного языка. Обычно код возвращал специальное значение или выставлял "флажок", а получатель должен был посмотреть на них и определить, что и где было не так. С течением времени, однако, выяснилось, что многие программисты думают о себе как о гениях: "да, ошибки в коде могут происходить у других, но не у меня". Поэтому не слишком удивительно, что они перестали проверять эти условия. Кроме того, даже если бы вы проверяли все условия ошибок каждый раз, когда вы вызываете тот или иной метод, ваш код превратился бы в ночной кошмар, став совершенно нечитаемым. Но поскольку многие программисты все еще ориентировались на эти языки, они сопротивлялись принятию истины: именно такой подход к ошибкам был главным препятствием для разработки крупных, масштабируемых и легко обслуживаемых программ.
А решение проблемы состоит в том, чтобы исключить случайную природу обработки ошибок, введя необходимый формализм принудительно.
Имя пользователя: Konan_varvar
Интересы:
Анна задумалась. Очень важно понять, где она сделала ошибку. И на этот раз ее не повторить.
***
В рассказе использованы материалы книги Bruce Eckel "Thinking in Java, 3rd Edition" в переводе автора.