Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Информатика учебник.doc
Скачиваний:
190
Добавлен:
13.05.2015
Размер:
27.91 Mб
Скачать

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

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

Каждый объект имеет набор свойств, который можно изменять как в процессе создания программы, так и в уже созданной программе. К свойствам кнопки относятся: надпись на кнопке, цвет кнопки, размер кнопки и т.д. Переменные объектного типа называют экземплярами объекта. Здесь требуется уточнение – экземпляр можно лишь формально назвать переменной.

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

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

Объектно-ориентированные языки программирования. Первый объектно-ориентированный язык программирования Simula 67 был разработан в конце 60-х годов в Норвегии. Авторы этого языка очень точно угадали перспективы развития программирования: их язык намного опередил свое время. Однако современники (программисты 60-х годов) оказались не готовы воспринять ценности языка Simula 67, и он не выдержал конкуренции с другими языками программирования (прежде всего, с языком Fortran). Прохладному отношению к языку Simula 67 способствовало и то обстоятельство, что он был реализован как интерпретируемый (а не компилируемый) язык, что было совершенно неприемлемым в 60-е годы, так как интерпретация связана со снижением эффективности (скорости выполнения) программ. Но достоинства языка Simula 67 были замечены некоторыми программистами, и в 70-е годы было разработано большое число экспериментальных объектно-ориентированных языков программирования: например, языки CLU, Alphard, Concurrent Pascal и др. Эти языки так и остались экспериментальными, но в результате их исследования были разработаны современные объектно-ориентированные языки программирования.

Самыми распространенными среди современных языков объектно-ориентированного программирования являются: C++, Java, Visual Basic и Object Pascal. Язык программирования C++ был разработан Бьерном Страуструпом, сотрудником AT&T Bell Laboratories. Непосредственным предшественником C++ является С with Classes, созданный тем же автором в 1980 году. Язык С with Classes, в свою очередь, был создан под сильным влиянием С и Simula. C++ – это в значительной степени надстройка над С. В определенном смысле можно назвать C++ улучшенным С, тем С, который обеспечивает контроль типов, перегрузку функций и ряд других удобств. Но главное в том, что C++ добавляет к С объектную ориентированность.

Известны несколько версий C++. В версии 1.0 реализованы основные механизмы объектно-ориентированного программирования, такие как одиночное наследование и полиморфизм, проверка типов и перегрузка функций. В созданной в 1989 году версии 2.0 нашли отражение многие дополнительные свойства, возникшие на базе широкого опыта применения языка многочисленным сообществом пользователей. В версии 3.0 (1990) появились шаблоны и обработка исключений. C++ продолжает совершенствоваться и в настоящее время, так в 1998 году вышла новая версия стандарта, содержащая в себе некоторые довольно существенные изменения. Язык стал основой для разработки современных больших и сложных проектов.

С 1995 года стал широко распространяться новый объектно-ориентированный язык программирования Java, ориентированный на сети компьютеров и, прежде всего, на Internet. Синтаксис этого языка напоминает синтаксис языка C++, однако эти языки имеют мало общего. Java интерпретируемый язык: для него определены внутреннее представление (bytecode) и интерпретатор этого представления, которые уже сейчас реализованы на большинстве платформ. Интерпретатор упрощает отладку программ, написанных на языке Java, обеспечивает их переносимость на новые платформы и адаптируемость к новым окружениям. Он позволяет исключить влияние программ, написанных на языке Java, на другие программы и файлы, имеющиеся на новой платформе, и тем самым обеспечить безопасность при выполнении этих программ. Эти свойства языка Java позволяют использовать его как основной язык программирования для программ, распространяемых по сетям (в частности, по сети Internet).

Язык Basic был адаптирован для использования на персональных компьютерах основателем и главой компании Microsoft Биллом Гейтсом в середине 70-х гг. С тех пор для ПК последовательно было выпущено несколько версий Basic, включая Microsoft Quick Basic и MS-DOS Qbasic. Хотя программная оболочка Visual Basic выполнена полностью графической, а сам язык программирования весьма далек от языка, применяемого для ранних версий интерпретаторов Basic , простота и элегантность Basic осталась в большой мере присущей и новым версиям. Широкие возможности Visual Basic и его простота послужили основной причиной для выбора его в качестве языка программирования для создания таких Windows- приложений как Excel.

Язык программирования Object Pascal создавался сотрудниками компании Apple Computer (некоторые из которых были участниками проекта Smalltalk) совместно с Никлаусом Виртом (Niklaus Wirth), создателем языка Pascal. Object Pascal известен с 1986 года и является первым объектно-ориентированным языком программирования, который был включен в Macintosh Programmer's Workshop (MPW), среду разработки для компьютеров Macintosh фирмы Apple.

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

Так как языкObject Pascal является продолжением развития и совершенствования языка Pascal, то алфавит языка Object Pascal практически совпадает с алфавитом языка Turbo Pascal 7.0., который мы рассмотрели в п.3.3. Добавлены некоторые зарезервированные слова и функции для работы с объектами. Вместо понятия переменной используется понятие идентификатор. Идентификатор предназначен для наименования любых объектов программы: констант, типов данных, переменных, процедур, функций, файлов, классов, самих программ. Идентификатор всегда начинается с буквы, длина идентификатора не должна превышать 64 символа. Язык Object Pascal является средством для написания программ в среде программирования Delphi, особенности которой мы рассмотрим ниже.

Вопросы для размышления:

1. Чем отличается объектно-ориентированное программирование от программного?

2. Какие существуют языки объектно-ориентированного программирования?