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

Лекции по DELPHI 57

Часть 1. Среда Delphi Тема 1. Объектно-ориентированное программирование

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

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

История

Основатели ООП – выдающиеся норвежские ученые Кристен Нигаард (Cristen Nygaard) и Оле-Йохан Даль (Ole-Johan Dahl). Работая над моделированием судовождения, Нигаард понял, что существующие программные средства малоэффективны в создании столь сложных программ, и тогда Нигаард начал разрабатывать концепции нового программирования, позволяющего преодолеть барьеры сложности, и которое впоследствии было названо объектно-ориентированным (сам термин был придуман Аланом Кеем, автором языка Java). Вместе с Оле-Йоханом Далем Нигаард разработал основные положения ООП и практические механизмы их реализации, которые затем были воплощены в первом ООЯ Симула (Simula). Заслуги этих ученых были по достоинству оценены мировым научным сообществом, и в 2001 году Нигаард и Даль стали лауреатами премии имени Алана Тьюринга – своеобразного аналога Нобелевской премии в области computer science.

Язык Симула пользовался известностью в академических кругах, однако по ряду причин не завоевал популярности среди разработчиков коммерческого ПО. Тем не менее основные идеи и возможности ООП были очень привлекательны для программистов. Впоследствии были созданы другие ООЯ: SmallTalk (1980), C++ (1985), Eiffel (1986), Object Pascal (1986) и Delphi (1995), Oberon-2 (1991), Java (1991), Visual Basic (1991) и многие другие. Некоторые из этих языков стали промышленными стандартами в программировании.

Особенности ООП

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

В обыденной жизни люди используют (пусть даже неосознанно) различные приемы "экономии мышления", позволяющие осмысливать и выражать сложные явления в простых понятиях. Типичными приемами "экономии мышления" являются:

  • абстрагирование (отбрасывание несущественных деталей);

  • обобщение (выделение общих существенных признаков у разных явлений или предметов);

классификация (осознание связи между явлениями и степени их схожести).

Эти простые приемы помогают человеку справиться со сложностью рассматриваемых явлений. И объектно-ориентированные языки программирования также должны предоставлять подобные средства для "борьбы со сложностью" программ. Для реализации объектно-ориентированного подхода в языки программирования вводятся новые понятия:

  • объекты – особые программные структуры, объединяющие данные и алгоритмы их обработки;

  • инкапсуляция – сокрытие подробностей функционирования объектов;

  • наследование – "сокращенный" способ создания новых классов;

  • полиморфизм – возможность применения нескольких реализаций одной функции.

Объекты и классы

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

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

В некоторых языках (C++, Java) объекты называются экземплярами класса (instances).

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

Инкапсуляция

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

С позиций "борьбы со сложностью" инкапсуляция позволяет переложить часть контроля за правильностью работы с объектами на компилятор (компьютер).

  • Различные ООЯ предлагают разные возможности по инкапсуляции свойств и методов (от полного отсутствия и до автоматического сокрытия всех полей).

Наследование

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

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

При необходимости любой родительский метод можно переопределить – т.е. назначить выполнение другого алгоритма в случае вызова одноименного метода класса-потомка.

Совокупность всех классов-предков и классов-потомков называется иерархией классов.

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

Полиморфизм

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

Если провести аналогию с реальной жизнью, то полиморфизм соответствует обобщенным действиям. Например, глагол "музицировать" означает "играть на музыкальном инструменте". Но на разных музыкальных инструментах играют по-разному. Термин один, а вариантов действия – много. Значит, "музицировать" – полиморфное действие. В ООП действию "музицировать" соответствовал бы полиморфный метод, имеющий свои реализации для каждого класса музыкальных инструментов.

В ООП есть два вида полиморфных методов – перегруженные и виртуальные.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]